diff -Nrcpad gcc-15-20250712/LAST_UPDATED gcc-15-20250719/LAST_UPDATED
*** gcc-15-20250712/LAST_UPDATED	Sat Jul 12 22:34:15 2025
--- gcc-15-20250719/LAST_UPDATED	Sat Jul 19 22:34:37 2025
***************
*** 1 ****
! Obtained from git: releases/gcc-15 revision c0900e67a08c0e1140ab47af4d1e90eb00bc17ee
--- 1 ----
! Obtained from git: releases/gcc-15 revision f000ed0a034cc99cdc17eb5cfc8f8258f883ed44
diff -Nrcpad gcc-15-20250712/MD5SUMS gcc-15-20250719/MD5SUMS
*** gcc-15-20250712/MD5SUMS	Sat Jul 12 22:34:20 2025
--- gcc-15-20250719/MD5SUMS	Sat Jul 19 22:34:43 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-15-20250712.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-15-20250719.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
*************** d32239bcb673463ab874e80d47fae504  COPYIN
*** 25,31 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 627f73c3edd3cadba0b0a27d3acdd763  LAST_UPDATED
  9d2cf5b58292c2e8b0804d3eafc2d6f3  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
--- 25,31 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 564a1bfa8ff48b408720be8ac50e5673  LAST_UPDATED
  9d2cf5b58292c2e8b0804d3eafc2d6f3  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 514,520 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! f470c8a9664e25e4f2b05ff3273317b0  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 514,520 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 0ba9c26fb089cd5ed4dfc1ce3ea84563  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 551,557 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 0caf0f192d8ca33554f1b15ff9270caf  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
--- 551,557 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! ee481b07767bf290c5f9f2434cd53802  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** ec6799501b2eb2923d5de6a66169dbd2  gcc/ON
*** 563,569 ****
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
  18db4664d7e31002aac43ebcf20e075f  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! f6808247cf58a318c97a6679dd0a3f7a  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 563,569 ----
  cd96bf34cb76c97f86704a59b9ddb18a  gcc/acinclude.m4
  18db4664d7e31002aac43ebcf20e075f  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 69b237aa433bd45ddcd3da341da2ae4e  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** bdd184bdbe9fb946500215a918ba9014  gcc/ad
*** 2931,2937 ****
  2471d629be4739ff5135aa87a2ec9166  gcc/ada/sem_ch2.ads
  765c2d32eb7f8e81ce9da54ba469dde3  gcc/ada/sem_ch3.adb
  5fd10023b617fc61dce7c2801674285d  gcc/ada/sem_ch3.ads
! 4477e3a08f99e2712526aa1d0e8240c8  gcc/ada/sem_ch4.adb
  adba03aae1f439b9e9db8cea05d8e03f  gcc/ada/sem_ch4.ads
  3d2fb7e75bcf5cb7e2f014691fbc1d87  gcc/ada/sem_ch5.adb
  cbfbd3e4737f56717fc2ffda6b38f125  gcc/ada/sem_ch5.ads
--- 2931,2937 ----
  2471d629be4739ff5135aa87a2ec9166  gcc/ada/sem_ch2.ads
  765c2d32eb7f8e81ce9da54ba469dde3  gcc/ada/sem_ch3.adb
  5fd10023b617fc61dce7c2801674285d  gcc/ada/sem_ch3.ads
! 3e54b6459faeeb42c9c8e748cfc81a3f  gcc/ada/sem_ch4.adb
  adba03aae1f439b9e9db8cea05d8e03f  gcc/ada/sem_ch4.ads
  3d2fb7e75bcf5cb7e2f014691fbc1d87  gcc/ada/sem_ch5.adb
  cbfbd3e4737f56717fc2ffda6b38f125  gcc/ada/sem_ch5.ads
*************** fe292df4b7f3e3ef7c0b8305084b6844  gcc/bi
*** 3201,3207 ****
  7cd04e6f25d02f9f2cecc8ce50e73e76  gcc/btfout.cc
  f808dbcc1ad6add5a0867c4b3e03fc4d  gcc/builtin-attrs.def
  9b2538f67781c7ccab3891a929caaaf0  gcc/builtin-types.def
! f82fc6b76f1820b69c268916c7fe1bf6  gcc/builtins.cc
  d86baafdac933140bc11c4cbfb28779e  gcc/builtins.def
  bd61b50b47560dc1324bf507bea5d87e  gcc/builtins.h
  1551b52b7e93ef9bc44fbb54633b846c  gcc/c-family/ChangeLog
--- 3201,3207 ----
  7cd04e6f25d02f9f2cecc8ce50e73e76  gcc/btfout.cc
  f808dbcc1ad6add5a0867c4b3e03fc4d  gcc/builtin-attrs.def
  9b2538f67781c7ccab3891a929caaaf0  gcc/builtin-types.def
! 2e944dea52dbc383e763e0585daa1b01  gcc/builtins.cc
  d86baafdac933140bc11c4cbfb28779e  gcc/builtins.def
  bd61b50b47560dc1324bf507bea5d87e  gcc/builtins.h
  1551b52b7e93ef9bc44fbb54633b846c  gcc/c-family/ChangeLog
*************** e52e97d4d4876d6657fdd48e9f622383  gcc/co
*** 3382,3388 ****
  2da12f05a7597886b6b659f44fb2d0b0  gcc/common/config/gcn/gcn-common.cc
  cba8bad9b28e5a0f8934b00becb13d4a  gcc/common/config/h8300/h8300-common.cc
  7b838bc6221e0cb6ec58686d071843ee  gcc/common/config/i386/cpuinfo.h
! c34d4141d32f1960ba4ad1416b1a74dc  gcc/common/config/i386/i386-common.cc
  319d43918a10f58e085c55aa15f20b48  gcc/common/config/i386/i386-cpuinfo.h
  905a09c0cc645c808afd0e7038f31aa3  gcc/common/config/i386/i386-isas.h
  2a64c5f639b347964e652ebb1add9831  gcc/common/config/ia64/ia64-common.cc
--- 3382,3388 ----
  2da12f05a7597886b6b659f44fb2d0b0  gcc/common/config/gcn/gcn-common.cc
  cba8bad9b28e5a0f8934b00becb13d4a  gcc/common/config/h8300/h8300-common.cc
  7b838bc6221e0cb6ec58686d071843ee  gcc/common/config/i386/cpuinfo.h
! b1dd83319f8b145674747f2ffc4814a9  gcc/common/config/i386/i386-common.cc
  319d43918a10f58e085c55aa15f20b48  gcc/common/config/i386/i386-cpuinfo.h
  905a09c0cc645c808afd0e7038f31aa3  gcc/common/config/i386/i386-isas.h
  2a64c5f639b347964e652ebb1add9831  gcc/common/config/ia64/ia64-common.cc
*************** e2d80b89552da0c6b4cb6bede3b2e573  gcc/co
*** 3473,3487 ****
  2578221253cb8c19e9f778140a8cf9af  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
  5ef25fd86c1c16a4a6fb3f74e12802b4  gcc/config/aarch64/aarch64-sve-builtins.h
! b45f552bc7dc893ae67b3f44db9f0b64  gcc/config/aarch64/aarch64-sve.md
! ba15eac226714e59e1ff1026c4e09ce0  gcc/config/aarch64/aarch64-sve2.md
  805529fa07916adcabb727f19ebd8dd2  gcc/config/aarch64/aarch64-sys-regs.def
  b301dc231a69a28202d2b7d79ea75f5d  gcc/config/aarch64/aarch64-tune.md
  06480b67fa44a0b9fa7de2ed778a3df9  gcc/config/aarch64/aarch64-tuning-flags.def
  a2493e870eb12f5d646c24f2949e4cd3  gcc/config/aarch64/aarch64-vxworks.h
  1b29953c4540d8dddd8d4b5e8fcd59b8  gcc/config/aarch64/aarch64.cc
  4c2226a017b612867a61db1f7929ad43  gcc/config/aarch64/aarch64.h
! df405f0182f3a78720d2332384132c61  gcc/config/aarch64/aarch64.md
  84c23cd68c90a9be4b986aa7009ba1c9  gcc/config/aarch64/aarch64.opt
  21fd50b19307096b8be37549ae0f6f77  gcc/config/aarch64/aarch64.opt.urls
  99f46f1d591aa221b0c93a221ad9dc43  gcc/config/aarch64/arm_acle.h
--- 3473,3487 ----
  2578221253cb8c19e9f778140a8cf9af  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
  5ef25fd86c1c16a4a6fb3f74e12802b4  gcc/config/aarch64/aarch64-sve-builtins.h
! 5bc90a3ee8d61e1f0724ecae13200771  gcc/config/aarch64/aarch64-sve.md
! 4d81b8287c9c05264192898d72a11a3a  gcc/config/aarch64/aarch64-sve2.md
  805529fa07916adcabb727f19ebd8dd2  gcc/config/aarch64/aarch64-sys-regs.def
  b301dc231a69a28202d2b7d79ea75f5d  gcc/config/aarch64/aarch64-tune.md
  06480b67fa44a0b9fa7de2ed778a3df9  gcc/config/aarch64/aarch64-tuning-flags.def
  a2493e870eb12f5d646c24f2949e4cd3  gcc/config/aarch64/aarch64-vxworks.h
  1b29953c4540d8dddd8d4b5e8fcd59b8  gcc/config/aarch64/aarch64.cc
  4c2226a017b612867a61db1f7929ad43  gcc/config/aarch64/aarch64.h
! 411e1d3571eca6300daf26431a1f99c7  gcc/config/aarch64/aarch64.md
  84c23cd68c90a9be4b986aa7009ba1c9  gcc/config/aarch64/aarch64.opt
  21fd50b19307096b8be37549ae0f6f77  gcc/config/aarch64/aarch64.opt.urls
  99f46f1d591aa221b0c93a221ad9dc43  gcc/config/aarch64/arm_acle.h
*************** ba79dc9cffbca47e10d361aeb3d716f3  gcc/co
*** 4198,4206 ****
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! 765681b67b4077e574de3f3fbc21898a  gcc/config/i386/i386.cc
! a7cf0111edc47fcb86d738f772e5fca2  gcc/config/i386/i386.h
! d4e557b6ba18e231a2dc2ac9d88f69fb  gcc/config/i386/i386.md
  5a3c6fa6266505bbc0789e269da6e250  gcc/config/i386/i386.opt
  56dd2039e03b3ae92142eb68be464b98  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
--- 4198,4206 ----
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! bc56596480d67d323c5d40302bce3fc8  gcc/config/i386/i386.cc
! 814201a3143f3d15ba0b897e34e3d459  gcc/config/i386/i386.h
! 9aebd89ef46add3cf1d781d5f9ba91a6  gcc/config/i386/i386.md
  5a3c6fa6266505bbc0789e269da6e250  gcc/config/i386/i386.opt
  56dd2039e03b3ae92142eb68be464b98  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
*************** a8cd9a4a3d712802475e91e0ec9a3274  gcc/co
*** 4436,4442 ****
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
  f0a4c6e5a7c0cbc0621c38506eb5fabf  gcc/config/loongarch/loongarch.cc
  cac7a4f19361731647870d2210078a9e  gcc/config/loongarch/loongarch.h
! 144c058839db085ef1f40f5de915226d  gcc/config/loongarch/loongarch.md
  bcc951e237d5501fc2acd6ef3141724c  gcc/config/loongarch/loongarch.opt
  264f23ee79258ff82bda293d093dd06b  gcc/config/loongarch/loongarch.opt.urls
  626538aad4ce79c9f33a19821084c1b3  gcc/config/loongarch/lsx.md
--- 4436,4442 ----
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
  f0a4c6e5a7c0cbc0621c38506eb5fabf  gcc/config/loongarch/loongarch.cc
  cac7a4f19361731647870d2210078a9e  gcc/config/loongarch/loongarch.h
! 9fd9109f20f7dfce6de910d45b5dbc85  gcc/config/loongarch/loongarch.md
  bcc951e237d5501fc2acd6ef3141724c  gcc/config/loongarch/loongarch.opt
  264f23ee79258ff82bda293d093dd06b  gcc/config/loongarch/loongarch.opt.urls
  626538aad4ce79c9f33a19821084c1b3  gcc/config/loongarch/lsx.md
*************** e0def687838ffb06159c1f1c713eabde  gcc/co
*** 4671,4677 ****
  79568dcf6c5ac79a2944a702604eb1b3  gcc/config/mmix/mmix-modes.def
  0d1fac3ed7908e832771169c2211485d  gcc/config/mmix/mmix-protos.h
  493cbf1b9db7ed473fdc77b42f00cf37  gcc/config/mmix/mmix.cc
! 876f6219230212ef3080c2c00bb00103  gcc/config/mmix/mmix.h
  75d895c540f209e357f6f2436b97349a  gcc/config/mmix/mmix.md
  8d96a8f7512a39594bda492661ca8c2f  gcc/config/mmix/mmix.opt
  1fc4fd001702b5999b134c729b9437a5  gcc/config/mmix/mmix.opt.urls
--- 4671,4677 ----
  79568dcf6c5ac79a2944a702604eb1b3  gcc/config/mmix/mmix-modes.def
  0d1fac3ed7908e832771169c2211485d  gcc/config/mmix/mmix-protos.h
  493cbf1b9db7ed473fdc77b42f00cf37  gcc/config/mmix/mmix.cc
! b1ffdd4690cb74e143cc97fff50b8aa2  gcc/config/mmix/mmix.h
  75d895c540f209e357f6f2436b97349a  gcc/config/mmix/mmix.md
  8d96a8f7512a39594bda492661ca8c2f  gcc/config/mmix/mmix.opt
  1fc4fd001702b5999b134c729b9437a5  gcc/config/mmix/mmix.opt.urls
*************** a5e691ce14017f2a89283ed510bb78fd  gcc/co
*** 4898,4904 ****
  81827306988efad07b1063e86fed4fba  gcc/config/riscv/autovec-opt.md
  4032274539da6915927b3fb611848f38  gcc/config/riscv/autovec.md
  1b5bf211ae4f1c676fc56b08b23e7d66  gcc/config/riscv/bitmanip.md
! b54febf04241d7f85370879f94688855  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
  d404c19d5b1a2aca0a73917bb692bd96  gcc/config/riscv/corev.md
  a8964e5c7fad78fa42fc5b8f0dc2e91b  gcc/config/riscv/crypto.md
--- 4898,4904 ----
  81827306988efad07b1063e86fed4fba  gcc/config/riscv/autovec-opt.md
  4032274539da6915927b3fb611848f38  gcc/config/riscv/autovec.md
  1b5bf211ae4f1c676fc56b08b23e7d66  gcc/config/riscv/bitmanip.md
! 41ad36f502789bcb62ddd76fa56ba00d  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
  d404c19d5b1a2aca0a73917bb692bd96  gcc/config/riscv/corev.md
  a8964e5c7fad78fa42fc5b8f0dc2e91b  gcc/config/riscv/crypto.md
*************** b7e955ddfed9efbb0296ef639c095e2a  gcc/co
*** 4913,4919 ****
  52728cfca05017f727570e4e983fc5fa  gcc/config/riscv/multilib-generator
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
  a3d3fa9142d4e2ed34ead146941c574a  gcc/config/riscv/pic.md
! 3d61850acd950a0bca784aa5c7375de7  gcc/config/riscv/predicates.md
  d7a63bbbf6653fc311084e8bb09d713b  gcc/config/riscv/riscv-avlprop.cc
  3b5651b95f6a076ccd28e73bae600e52  gcc/config/riscv/riscv-builtins.cc
  4107a71abfd2e5225d66986a671e05a5  gcc/config/riscv/riscv-c.cc
--- 4913,4919 ----
  52728cfca05017f727570e4e983fc5fa  gcc/config/riscv/multilib-generator
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
  a3d3fa9142d4e2ed34ead146941c574a  gcc/config/riscv/pic.md
! fd976e9dd7410889959b27b332b33e1b  gcc/config/riscv/predicates.md
  d7a63bbbf6653fc311084e8bb09d713b  gcc/config/riscv/riscv-avlprop.cc
  3b5651b95f6a076ccd28e73bae600e52  gcc/config/riscv/riscv-builtins.cc
  4107a71abfd2e5225d66986a671e05a5  gcc/config/riscv/riscv-c.cc
*************** cc4d538f7d66895b427db54b9660a953  gcc/co
*** 4934,4940 ****
  5934e743da72bdc74e1d53f049b127fc  gcc/config/riscv/riscv-string.cc
  6e4e2a0f934c6d930c9d9243d5c89f92  gcc/config/riscv/riscv-subset.h
  a583d4ec085af9e2f577c155bf259caf  gcc/config/riscv/riscv-target-attr.cc
! 3f3495b0b9c514fc429e35f9f53918be  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  8bb68ed754e01cc6cbd31b250968d7f6  gcc/config/riscv/riscv-vector-builtins-bases.cc
  689f453a4cdf7fa3e64a7f4bfba8f7dd  gcc/config/riscv/riscv-vector-builtins-bases.h
--- 4934,4940 ----
  5934e743da72bdc74e1d53f049b127fc  gcc/config/riscv/riscv-string.cc
  6e4e2a0f934c6d930c9d9243d5c89f92  gcc/config/riscv/riscv-subset.h
  a583d4ec085af9e2f577c155bf259caf  gcc/config/riscv/riscv-target-attr.cc
! f7ba2198fd37168868f4010a0de34bab  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  8bb68ed754e01cc6cbd31b250968d7f6  gcc/config/riscv/riscv-vector-builtins-bases.cc
  689f453a4cdf7fa3e64a7f4bfba8f7dd  gcc/config/riscv/riscv-vector-builtins-bases.h
*************** f51037a9e437f8e9ce7215b2da5ad4e2  gcc/co
*** 4953,4959 ****
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
  9683aceb419c131edaf7f66f9f9192f0  gcc/config/riscv/riscv.cc
  1153302a8d65cedebba8e1a3f67931b2  gcc/config/riscv/riscv.h
! f846c6bba1a72f54b5cdc29e5670f244  gcc/config/riscv/riscv.md
  c799356a57b52ab91ff324ab22516fba  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
--- 4953,4959 ----
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
  9683aceb419c131edaf7f66f9f9192f0  gcc/config/riscv/riscv.cc
  1153302a8d65cedebba8e1a3f67931b2  gcc/config/riscv/riscv.h
! 4454024804f9347267bff50e57227934  gcc/config/riscv/riscv.md
  c799356a57b52ab91ff324ab22516fba  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
*************** a1a32736dcb092a13f31062d537619b4  gcc/co
*** 4972,4978 ****
  b5fb046770f7e60fc485d6092c296c38  gcc/config/riscv/sifive_vector.h
  faca69fa18f3f779cd3ee4d6a53e6193  gcc/config/riscv/sync-rvwmo.md
  4dff560d8961c6dd9b4dd18c668c629e  gcc/config/riscv/sync-ztso.md
! 08edcccff9f3994996d3970c2a0da726  gcc/config/riscv/sync.md
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
--- 4972,4978 ----
  b5fb046770f7e60fc485d6092c296c38  gcc/config/riscv/sifive_vector.h
  faca69fa18f3f779cd3ee4d6a53e6193  gcc/config/riscv/sync-rvwmo.md
  4dff560d8961c6dd9b4dd18c668c629e  gcc/config/riscv/sync-ztso.md
! b24091b318c53548bc2b7d90f6505e4e  gcc/config/riscv/sync.md
  1c27821991689abdaa7a908a0cc8dfa4  gcc/config/riscv/t-elf-multilib
  381cb38e167feed84dad697fce89cabd  gcc/config/riscv/t-linux
  1ed181a166b1d0e206c4a4e0024cce2a  gcc/config/riscv/t-linux-multilib
*************** acdfc663791e4321372e79932070d05d  gcc/do
*** 5924,5930 ****
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  1a2d44757bb0f40b09493ac3863eba93  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! 12d26eca4c14a62f2aec6fa8b91c744c  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
--- 5924,5930 ----
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  1a2d44757bb0f40b09493ac3863eba93  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! 214bab38dfc304ce2f0b6afedaddfa3b  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
*************** ee4c7654f733cefcb73d4fd24f3e1b82  gcc/do
*** 5948,5954 ****
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  4cf31ce9dc9e7079c1c99e7dd07215ae  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! a81f174a367a612318f125f106367f13  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 5948,5954 ----
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  4cf31ce9dc9e7079c1c99e7dd07215ae  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! 56b8a86d0bf8a6254f6d6d61d52b2a18  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  5200cc28a2ab912efe66f0944995c45b  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** b5fa845ff578d70e8ceae655d6affc51  gcc/ex
*** 6039,6045 ****
  dee0d85cc89e81b4cc185f1c3102811e  gcc/expmed.h
  bc438860c6c9b2d1d32fad8eb6040ccd  gcc/expr.cc
  5480b0f834e382e22c92192d7f5a4744  gcc/expr.h
! b7ef4a8453eca6dbe12f52da45389cf6  gcc/ext-dce.cc
  2ecf474a8f5380e5027c5b7a745cd736  gcc/fibonacci_heap.cc
  4e78fbbdb0a8c835b984d732a6d97a7b  gcc/fibonacci_heap.h
  ee644c05e4a3461a8c2f5a4a5ea285bd  gcc/file-find.cc
--- 6039,6045 ----
  dee0d85cc89e81b4cc185f1c3102811e  gcc/expmed.h
  bc438860c6c9b2d1d32fad8eb6040ccd  gcc/expr.cc
  5480b0f834e382e22c92192d7f5a4744  gcc/expr.h
! 6630556dbcf078aded04b116429a3077  gcc/ext-dce.cc
  2ecf474a8f5380e5027c5b7a745cd736  gcc/fibonacci_heap.cc
  4e78fbbdb0a8c835b984d732a6d97a7b  gcc/fibonacci_heap.h
  ee644c05e4a3461a8c2f5a4a5ea285bd  gcc/file-find.cc
*************** a798cdca802a57ffa3473ab610b37c86  gcc/fo
*** 6056,6062 ****
  4b1bef753dda2d19671f35332c69a0f7  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! b3ebd3eb7c09510f245231cb43ff624d  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6056,6062 ----
  4b1bef753dda2d19671f35332c69a0f7  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! 6f96bd2e6d28cc0ae7d72a24301e3b73  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** db21881c77a22fd3dbfe253c364af5ee  gcc/fo
*** 6087,6093 ****
  1f47886d616538f880e240f661990624  gcc/fortran/array.cc
  59221f5e105887dce9d0c1b7694aa86f  gcc/fortran/bbt.cc
  3a560d16f485ed40604aa07a7acf15ad  gcc/fortran/check.cc
! ec152c8d16c33705590d8b2ddbcad0b7  gcc/fortran/class.cc
  0b318d001d48262e9cebd6f7ebb84a37  gcc/fortran/coarray.cc
  6047324cb87b56ae23d2293c5ef13ddb  gcc/fortran/config-lang.in
  16ea0e15947038265fbb5983b455b7bf  gcc/fortran/constructor.cc
--- 6087,6093 ----
  1f47886d616538f880e240f661990624  gcc/fortran/array.cc
  59221f5e105887dce9d0c1b7694aa86f  gcc/fortran/bbt.cc
  3a560d16f485ed40604aa07a7acf15ad  gcc/fortran/check.cc
! 4cd50f78498dfdce8f3ba18b4639e2d6  gcc/fortran/class.cc
  0b318d001d48262e9cebd6f7ebb84a37  gcc/fortran/coarray.cc
  6047324cb87b56ae23d2293c5ef13ddb  gcc/fortran/config-lang.in
  16ea0e15947038265fbb5983b455b7bf  gcc/fortran/constructor.cc
*************** bd08c55098f00394b9922e6163c27b92  gcc/fo
*** 6110,6116 ****
  557c4faded3d865f6f6304bf63f9bb85  gcc/fortran/gfortran.h
  7ec4df43fc3e2bbc14dd583bdd6483a5  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
! d3fd647d14d10316a01447090ed2bbac  gcc/fortran/interface.cc
  e80f8d5e01bd73d525ea93cef3a40a2d  gcc/fortran/intrinsic.cc
  cf346cfc6814f9a773f9f0ee705ab3aa  gcc/fortran/intrinsic.h
  5a25603bd6939073616d56ff5c8de9cc  gcc/fortran/intrinsic.texi
--- 6110,6116 ----
  557c4faded3d865f6f6304bf63f9bb85  gcc/fortran/gfortran.h
  7ec4df43fc3e2bbc14dd583bdd6483a5  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
! 9253f176e44c2708e2c503251b27d6b8  gcc/fortran/interface.cc
  e80f8d5e01bd73d525ea93cef3a40a2d  gcc/fortran/intrinsic.cc
  cf346cfc6814f9a773f9f0ee705ab3aa  gcc/fortran/intrinsic.h
  5a25603bd6939073616d56ff5c8de9cc  gcc/fortran/intrinsic.texi
*************** ba1a270a0735e8dd213da50ccb70ea32  gcc/fo
*** 6152,6158 ****
  6128f79195fff9b0987836a492736069  gcc/fortran/trans-expr.cc
  4409efd13e205fa6886f73e55cc425bb  gcc/fortran/trans-intrinsic.cc
  9cf7c294c06fdaea67dcd2b9ff2cf5ad  gcc/fortran/trans-io.cc
! 710d1b981b11b3456d5e23839efa4675  gcc/fortran/trans-openmp.cc
  03aafb32bf3170c38549a2536ebb7e4c  gcc/fortran/trans-stmt.cc
  3e46866176ab0bac5fb67ed27515535d  gcc/fortran/trans-stmt.h
  3910394d74aab50fba42ab60b9b75ad3  gcc/fortran/trans-types.cc
--- 6152,6158 ----
  6128f79195fff9b0987836a492736069  gcc/fortran/trans-expr.cc
  4409efd13e205fa6886f73e55cc425bb  gcc/fortran/trans-intrinsic.cc
  9cf7c294c06fdaea67dcd2b9ff2cf5ad  gcc/fortran/trans-io.cc
! b1027c10f4a35d0040a0da3b22a13d59  gcc/fortran/trans-openmp.cc
  03aafb32bf3170c38549a2536ebb7e4c  gcc/fortran/trans-stmt.cc
  3e46866176ab0bac5fb67ed27515535d  gcc/fortran/trans-stmt.h
  3910394d74aab50fba42ab60b9b75ad3  gcc/fortran/trans-types.cc
*************** da09d1e31d3994eb3d6958074d7b7ce5  gcc/gi
*** 6245,6251 ****
  fea7635818b5d7cefd4c7a0b268a254c  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
! 875e0d004a6137ff742265de906fd301  gcc/gimple-fold.cc
  8780d2011b6a9ef6c285eead522a3286  gcc/gimple-fold.h
  98652c967ce7f8dda9a1c398caa0996a  gcc/gimple-harden-conditionals.cc
  34959112cc04df5744be2b160e2f9d80  gcc/gimple-harden-control-flow.cc
--- 6245,6251 ----
  fea7635818b5d7cefd4c7a0b268a254c  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
! c5d4ddea06a53f7125a589f1aee71c71  gcc/gimple-fold.cc
  8780d2011b6a9ef6c285eead522a3286  gcc/gimple-fold.h
  98652c967ce7f8dda9a1c398caa0996a  gcc/gimple-harden-conditionals.cc
  34959112cc04df5744be2b160e2f9d80  gcc/gimple-harden-control-flow.cc
*************** b3d2e0a4fdb1acc7d7c1d1222ec7077d  gcc/in
*** 6449,6457 ****
  0dc4e5a1c70a5b34153b06594dd3ae85  gcc/insn-addr.h
  eec072fb4c8277a3634cf4cdc0846598  gcc/insn-notes.def
  769443add1b7187045688cd8b1129647  gcc/int-vector-builder.h
! b0418c0b5b0600719b633f4afcd328ea  gcc/internal-fn.cc
  0eb0c9844fd70032778f6dc9c246eafd  gcc/internal-fn.def
! 329c266487376ce133d0e9e580fc7a58  gcc/internal-fn.h
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
--- 6449,6457 ----
  0dc4e5a1c70a5b34153b06594dd3ae85  gcc/insn-addr.h
  eec072fb4c8277a3634cf4cdc0846598  gcc/insn-notes.def
  769443add1b7187045688cd8b1129647  gcc/int-vector-builder.h
! 5d8de21d911455415ff652b50a7612ec  gcc/internal-fn.cc
  0eb0c9844fd70032778f6dc9c246eafd  gcc/internal-fn.def
! ef535a32c5b6f227a666c63523f6bb80  gcc/internal-fn.h
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
*************** e44c0bf9cc0411d7bd57c6585eb6d0e4  gcc/lt
*** 6678,6684 ****
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! d85f7873e20d31f41ba54503b0de1d52  gcc/m2/ChangeLog
  33352ea845a8d2399793299f3e58a218  gcc/m2/Make-lang.in
  93fe99bf456561cd217f1c93d2ab7da7  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
--- 6678,6684 ----
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! dd71da47425982351767793819170f15  gcc/m2/ChangeLog
  33352ea845a8d2399793299f3e58a218  gcc/m2/Make-lang.in
  93fe99bf456561cd217f1c93d2ab7da7  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
*************** dec6f2aff29cb5fe1427242c7c5e9bd7  gcc/m2
*** 6709,6716 ****
  4fd8de25a94ebe3d7dc535d77d35bcf1  gcc/m2/gm2-compiler/M2Bitset.mod
  d4b939b5e1e8ebd5bbfd57a171da0768  gcc/m2/gm2-compiler/M2CaseList.def
  d7fec62c2b6b02dd7e4572d655ab9df6  gcc/m2/gm2-compiler/M2CaseList.mod
! b6a105b49f033eae03d7e9f503b92233  gcc/m2/gm2-compiler/M2Check.def
! 9d86f689b3a62f4148d122fb1d6f2eaa  gcc/m2/gm2-compiler/M2Check.mod
  478260474362f8756893377722538db4  gcc/m2/gm2-compiler/M2Code.def
  0737ee73e0c5f6e620bab4cd1e3a96b6  gcc/m2/gm2-compiler/M2Code.mod
  7ec6d0e1d8778b77940a35fb413cc951  gcc/m2/gm2-compiler/M2ColorString.def
--- 6709,6716 ----
  4fd8de25a94ebe3d7dc535d77d35bcf1  gcc/m2/gm2-compiler/M2Bitset.mod
  d4b939b5e1e8ebd5bbfd57a171da0768  gcc/m2/gm2-compiler/M2CaseList.def
  d7fec62c2b6b02dd7e4572d655ab9df6  gcc/m2/gm2-compiler/M2CaseList.mod
! e77e63c641c7e1cd6a919ca2565d5a53  gcc/m2/gm2-compiler/M2Check.def
! 3866e1c7f421c02e592f801e8c90b62e  gcc/m2/gm2-compiler/M2Check.mod
  478260474362f8756893377722538db4  gcc/m2/gm2-compiler/M2Code.def
  0737ee73e0c5f6e620bab4cd1e3a96b6  gcc/m2/gm2-compiler/M2Code.mod
  7ec6d0e1d8778b77940a35fb413cc951  gcc/m2/gm2-compiler/M2ColorString.def
*************** f2f6ad340399124ac1dd7765e1b675a5  gcc/m2
*** 6735,6743 ****
  9ef5089ff86e26a81035ec039bdc6650  gcc/m2/gm2-compiler/M2FileName.def
  742f1dc44d1ac7917fcbaf8704bdb395  gcc/m2/gm2-compiler/M2FileName.mod
  b3c98d490dd50cdd4e4de316e0deca54  gcc/m2/gm2-compiler/M2GCCDeclare.def
! 0334dee0562359e9a335b23e63acc113  gcc/m2/gm2-compiler/M2GCCDeclare.mod
  3d68446acff53fae7c5d6c425f0cf67e  gcc/m2/gm2-compiler/M2GenGCC.def
! 4304e125ac84b77de47e28550c396339  gcc/m2/gm2-compiler/M2GenGCC.mod
  273c623529a07acbf2f80b58e2d7567e  gcc/m2/gm2-compiler/M2Graph.def
  4e2b3a2e0b4cc7af0785ab9e41438e6b  gcc/m2/gm2-compiler/M2Graph.mod
  0d543e40ef3f1bcdf8edf9e06baa1edb  gcc/m2/gm2-compiler/M2LangDump.def
--- 6735,6743 ----
  9ef5089ff86e26a81035ec039bdc6650  gcc/m2/gm2-compiler/M2FileName.def
  742f1dc44d1ac7917fcbaf8704bdb395  gcc/m2/gm2-compiler/M2FileName.mod
  b3c98d490dd50cdd4e4de316e0deca54  gcc/m2/gm2-compiler/M2GCCDeclare.def
! 5b42ae2b2bea2b053a252452ce4b57bd  gcc/m2/gm2-compiler/M2GCCDeclare.mod
  3d68446acff53fae7c5d6c425f0cf67e  gcc/m2/gm2-compiler/M2GenGCC.def
! 27671eb59c0f3868cece3d034a2b15cd  gcc/m2/gm2-compiler/M2GenGCC.mod
  273c623529a07acbf2f80b58e2d7567e  gcc/m2/gm2-compiler/M2Graph.def
  4e2b3a2e0b4cc7af0785ab9e41438e6b  gcc/m2/gm2-compiler/M2Graph.mod
  0d543e40ef3f1bcdf8edf9e06baa1edb  gcc/m2/gm2-compiler/M2LangDump.def
*************** cccf272bab8c31a6af4113dc6a4e7b2d  gcc/m2
*** 6746,6757 ****
  0b2e870715b8c61c0f2f872a91124e0f  gcc/m2/gm2-compiler/M2Lex.mod
  a45ab5cf82c6f9afcaac634dd94f9e74  gcc/m2/gm2-compiler/M2LexBuf.def
  b112f4dc73573695c3456ad0128babea  gcc/m2/gm2-compiler/M2LexBuf.mod
! d5e90638a6be76d16e254f2d49424f5a  gcc/m2/gm2-compiler/M2MetaError.def
! e0b507413bb6cd0581c5eae75886518e  gcc/m2/gm2-compiler/M2MetaError.mod
  30199ab614068ba2ade7649d91420d13  gcc/m2/gm2-compiler/M2Optimize.def
  6b138f381fa3bee219d0c362567bbcb0  gcc/m2/gm2-compiler/M2Optimize.mod
! d327c19316a54d8729d7a771974b9719  gcc/m2/gm2-compiler/M2Options.def
! 3014d3d6b4d606a0404fc28e9bf73ae1  gcc/m2/gm2-compiler/M2Options.mod
  d4665bec21a330a2ea9d700f430b902c  gcc/m2/gm2-compiler/M2Pass.def
  27d906feaab7f1e1088a6e5561972605  gcc/m2/gm2-compiler/M2Pass.mod
  ba5338a3d56483c2fe43bb703d68d88a  gcc/m2/gm2-compiler/M2Preprocess.def
--- 6746,6757 ----
  0b2e870715b8c61c0f2f872a91124e0f  gcc/m2/gm2-compiler/M2Lex.mod
  a45ab5cf82c6f9afcaac634dd94f9e74  gcc/m2/gm2-compiler/M2LexBuf.def
  b112f4dc73573695c3456ad0128babea  gcc/m2/gm2-compiler/M2LexBuf.mod
! ce8b84d06b3a3f63e9c45f9a9d2c20ec  gcc/m2/gm2-compiler/M2MetaError.def
! d5fe10cebe9d9d283ec9fd8a1f255175  gcc/m2/gm2-compiler/M2MetaError.mod
  30199ab614068ba2ade7649d91420d13  gcc/m2/gm2-compiler/M2Optimize.def
  6b138f381fa3bee219d0c362567bbcb0  gcc/m2/gm2-compiler/M2Optimize.mod
! 4de3b1a67e6b8567572dd9a344366b3b  gcc/m2/gm2-compiler/M2Options.def
! 10a79e5e781dfec73ae9ae10d9aafe05  gcc/m2/gm2-compiler/M2Options.mod
  d4665bec21a330a2ea9d700f430b902c  gcc/m2/gm2-compiler/M2Pass.def
  27d906feaab7f1e1088a6e5561972605  gcc/m2/gm2-compiler/M2Pass.mod
  ba5338a3d56483c2fe43bb703d68d88a  gcc/m2/gm2-compiler/M2Preprocess.def
*************** ffffd6bd10c2f3d61aee939845cdb397  gcc/m2
*** 6759,6769 ****
  5aae879fe93711ac462b3871f94cfdfb  gcc/m2/gm2-compiler/M2Printf.def
  2984233cca97a1078980faba9ae9c1c5  gcc/m2/gm2-compiler/M2Printf.mod
  1f3929030e3dde0bd645746be5c341d3  gcc/m2/gm2-compiler/M2Quads.def
! 6f1b0894c94978c5d67c6d78679cec2a  gcc/m2/gm2-compiler/M2Quads.mod
  652e5da6749bca8b22b149208db30048  gcc/m2/gm2-compiler/M2Quiet.def
  fe82981e1fc213781973d90590cac13a  gcc/m2/gm2-compiler/M2Quiet.mod
! 9f24b5a3c0b7a01ab30febbaab5884ca  gcc/m2/gm2-compiler/M2Range.def
! 815279d5821105d8eb7675448b8ef8aa  gcc/m2/gm2-compiler/M2Range.mod
  4a2f65e7c18c35e70ddd63bff56f07c8  gcc/m2/gm2-compiler/M2Reserved.def
  dbf158483e30ce2911313b80d3d6c72c  gcc/m2/gm2-compiler/M2Reserved.mod
  ed9342d46dccb1fef2e7dd1b2a268c89  gcc/m2/gm2-compiler/M2SSA.def
--- 6759,6769 ----
  5aae879fe93711ac462b3871f94cfdfb  gcc/m2/gm2-compiler/M2Printf.def
  2984233cca97a1078980faba9ae9c1c5  gcc/m2/gm2-compiler/M2Printf.mod
  1f3929030e3dde0bd645746be5c341d3  gcc/m2/gm2-compiler/M2Quads.def
! f4818e2ea724bb28639ec9b6d2b964af  gcc/m2/gm2-compiler/M2Quads.mod
  652e5da6749bca8b22b149208db30048  gcc/m2/gm2-compiler/M2Quiet.def
  fe82981e1fc213781973d90590cac13a  gcc/m2/gm2-compiler/M2Quiet.mod
! 3a524bf1e1843ed3472cde4c27661681  gcc/m2/gm2-compiler/M2Range.def
! 6579931bd23b1667200a0f9d433fcb22  gcc/m2/gm2-compiler/M2Range.mod
  4a2f65e7c18c35e70ddd63bff56f07c8  gcc/m2/gm2-compiler/M2Reserved.def
  dbf158483e30ce2911313b80d3d6c72c  gcc/m2/gm2-compiler/M2Reserved.mod
  ed9342d46dccb1fef2e7dd1b2a268c89  gcc/m2/gm2-compiler/M2SSA.def
*************** b347f8b97c2042773c008adffe4e54d9  gcc/m2
*** 6805,6823 ****
  7f0d77f27044b69065c97e7e1f2f361b  gcc/m2/gm2-compiler/P1Build.def
  022dddb1d109a1c84112ee601cb7e4fb  gcc/m2/gm2-compiler/P1SymBuild.def
  f84c328e57949cf1d3f9714ac54e6423  gcc/m2/gm2-compiler/P1SymBuild.mod
! 30a904cfa4fb7521224063ca4cb5db42  gcc/m2/gm2-compiler/P2Build.bnf
  5d3aa3c32f62966992c31b5bd6fe9bdb  gcc/m2/gm2-compiler/P2Build.def
  7d034c383eee29111871cfe944a77b96  gcc/m2/gm2-compiler/P2SymBuild.def
! 59bcfdf13f9e458685b5b91da6fc5bdb  gcc/m2/gm2-compiler/P2SymBuild.mod
! 51b57398efecd0faf40087ef1797d3d0  gcc/m2/gm2-compiler/P3Build.bnf
  41f585d1e8e6fd1786dd36cb69cf3e82  gcc/m2/gm2-compiler/P3Build.def
  ad7a010b25f95dc012f12d3c97133a4b  gcc/m2/gm2-compiler/P3SymBuild.def
  feac1271dd2de34f953140b4b62a2c73  gcc/m2/gm2-compiler/P3SymBuild.mod
! 731c6ffb9b31221c7fee837869eff0a9  gcc/m2/gm2-compiler/PCBuild.bnf
  428e2092f5708fd9cf986ae14771fff1  gcc/m2/gm2-compiler/PCBuild.def
  333e3b954ec138cdfb9ac52c7fc37ee9  gcc/m2/gm2-compiler/PCSymBuild.def
  e524773f84b80cb2ecbe501fc5711e67  gcc/m2/gm2-compiler/PCSymBuild.mod
! 674904f1d941d249c3e960622fc886f7  gcc/m2/gm2-compiler/PHBuild.bnf
  08361e38dfa7f065be723afaa04d8986  gcc/m2/gm2-compiler/PHBuild.def
  b521bc37b844fd46fdfddcf3d2287f13  gcc/m2/gm2-compiler/PathName.def
  96de7226734080944c4bdf83b7dbb0ca  gcc/m2/gm2-compiler/PathName.mod
--- 6805,6823 ----
  7f0d77f27044b69065c97e7e1f2f361b  gcc/m2/gm2-compiler/P1Build.def
  022dddb1d109a1c84112ee601cb7e4fb  gcc/m2/gm2-compiler/P1SymBuild.def
  f84c328e57949cf1d3f9714ac54e6423  gcc/m2/gm2-compiler/P1SymBuild.mod
! dfc36d5f0832b9dd188d6557ffef76d3  gcc/m2/gm2-compiler/P2Build.bnf
  5d3aa3c32f62966992c31b5bd6fe9bdb  gcc/m2/gm2-compiler/P2Build.def
  7d034c383eee29111871cfe944a77b96  gcc/m2/gm2-compiler/P2SymBuild.def
! caa873bb1109b87a03db4edde0bca2dc  gcc/m2/gm2-compiler/P2SymBuild.mod
! 3fd9aa5301c284bb3b4ee2d6479b711b  gcc/m2/gm2-compiler/P3Build.bnf
  41f585d1e8e6fd1786dd36cb69cf3e82  gcc/m2/gm2-compiler/P3Build.def
  ad7a010b25f95dc012f12d3c97133a4b  gcc/m2/gm2-compiler/P3SymBuild.def
  feac1271dd2de34f953140b4b62a2c73  gcc/m2/gm2-compiler/P3SymBuild.mod
! e00cf6ed8d0c099ab8f33394bfeb4dc3  gcc/m2/gm2-compiler/PCBuild.bnf
  428e2092f5708fd9cf986ae14771fff1  gcc/m2/gm2-compiler/PCBuild.def
  333e3b954ec138cdfb9ac52c7fc37ee9  gcc/m2/gm2-compiler/PCSymBuild.def
  e524773f84b80cb2ecbe501fc5711e67  gcc/m2/gm2-compiler/PCSymBuild.mod
! 08d1991abfb4f71b76010396a93251eb  gcc/m2/gm2-compiler/PHBuild.bnf
  08361e38dfa7f065be723afaa04d8986  gcc/m2/gm2-compiler/PHBuild.def
  b521bc37b844fd46fdfddcf3d2287f13  gcc/m2/gm2-compiler/PathName.def
  96de7226734080944c4bdf83b7dbb0ca  gcc/m2/gm2-compiler/PathName.mod
*************** fcea7fa814eb36ddef577d6be2c93e63  gcc/m2
*** 6880,6886 ****
  5788cdee0acc63304e8a5005f050e8db  gcc/m2/gm2-gcc/m2misc.cc
  421b5a035afb6002ff2a6ea75f46fb8b  gcc/m2/gm2-gcc/m2misc.def
  d1b31285582b67ba97d01e8e43b1b2d6  gcc/m2/gm2-gcc/m2misc.h
! 188c054ee4e9d54504fdcc6c5c61012f  gcc/m2/gm2-gcc/m2options.h
  fc9e0e22b8c78d20df127cd19a3d6992  gcc/m2/gm2-gcc/m2pp.cc
  bb3433f39db6f3c3cfdf3511e76c67e0  gcc/m2/gm2-gcc/m2pp.def
  698b9ffff0556061b1385c89a3262733  gcc/m2/gm2-gcc/m2pp.h
--- 6880,6886 ----
  5788cdee0acc63304e8a5005f050e8db  gcc/m2/gm2-gcc/m2misc.cc
  421b5a035afb6002ff2a6ea75f46fb8b  gcc/m2/gm2-gcc/m2misc.def
  d1b31285582b67ba97d01e8e43b1b2d6  gcc/m2/gm2-gcc/m2misc.h
! 0772ce4d76e23365f02b2e795ecdb061  gcc/m2/gm2-gcc/m2options.h
  fc9e0e22b8c78d20df127cd19a3d6992  gcc/m2/gm2-gcc/m2pp.cc
  bb3433f39db6f3c3cfdf3511e76c67e0  gcc/m2/gm2-gcc/m2pp.def
  698b9ffff0556061b1385c89a3262733  gcc/m2/gm2-gcc/m2pp.h
*************** c9c5e6e4fbd4b365b1738fb97167c772  gcc/m2
*** 6964,6969 ****
--- 6964,6971 ----
  27e57c815545197925f9000c5be148ab  gcc/m2/gm2-libs-iso/GeneralUserExceptions.mod
  3be4b03912f03e5164671e278a4ba6a1  gcc/m2/gm2-libs-iso/IOChan.def
  d7d18b9eb960d97c1a449517b186fe0b  gcc/m2/gm2-libs-iso/IOChan.mod
+ c952fa889a1808a16de26ca7e30f8101  gcc/m2/gm2-libs-iso/IOChanUtils.def
+ fcb6e13112c3378c53ef65b83d811647  gcc/m2/gm2-libs-iso/IOChanUtils.mod
  58b81b1b97143b27dfd3d5c225da285c  gcc/m2/gm2-libs-iso/IOConsts.def
  ac7a7f55d14feeed5dab02f4d5f434a3  gcc/m2/gm2-libs-iso/IOConsts.mod
  3d1e4b84b179c15fe8b1fc60b7d46e6c  gcc/m2/gm2-libs-iso/IOLink.def
*************** a350794ca4c4b323746571b0e676afb6  gcc/m2
*** 7119,7130 ****
  f4373a75a461ec7946606dc749454355  gcc/m2/gm2-libs-log/Display.mod
  5e3e5af0b038ce4ac3ec8d8b92443fdc  gcc/m2/gm2-libs-log/ErrorCode.def
  bcf0466406e2a958f390256fcdb71e90  gcc/m2/gm2-libs-log/ErrorCode.mod
! 2a53ad0bf4ea1e72f00894c372143abd  gcc/m2/gm2-libs-log/FileSystem.def
! 89d69db340acfcc76ec092c2522fc138  gcc/m2/gm2-libs-log/FileSystem.mod
  8d73e14ade71f4eb2157891f0240fbdb  gcc/m2/gm2-libs-log/FloatingUtilities.def
  c8b643a1644e7213a7a9168f372236e0  gcc/m2/gm2-libs-log/FloatingUtilities.mod
  54b70a547bf2038b6a26f37ac5a132d4  gcc/m2/gm2-libs-log/InOut.def
! df6d092b094b6bf779c6dce71e8f2ca8  gcc/m2/gm2-libs-log/InOut.mod
  a03e7ac626c4153628f9a55ff67b1414  gcc/m2/gm2-libs-log/Keyboard.def
  5c23f823ba8713af6603b6786ded29c3  gcc/m2/gm2-libs-log/Keyboard.mod
  4ca2609946edd2a99dffa88148791946  gcc/m2/gm2-libs-log/LongIO.def
--- 7121,7132 ----
  f4373a75a461ec7946606dc749454355  gcc/m2/gm2-libs-log/Display.mod
  5e3e5af0b038ce4ac3ec8d8b92443fdc  gcc/m2/gm2-libs-log/ErrorCode.def
  bcf0466406e2a958f390256fcdb71e90  gcc/m2/gm2-libs-log/ErrorCode.mod
! 59f2edb401d8ded52aeb2feba1f39258  gcc/m2/gm2-libs-log/FileSystem.def
! a9beffdbc626348ff790aa57fec4a80b  gcc/m2/gm2-libs-log/FileSystem.mod
  8d73e14ade71f4eb2157891f0240fbdb  gcc/m2/gm2-libs-log/FloatingUtilities.def
  c8b643a1644e7213a7a9168f372236e0  gcc/m2/gm2-libs-log/FloatingUtilities.mod
  54b70a547bf2038b6a26f37ac5a132d4  gcc/m2/gm2-libs-log/InOut.def
! 5c65d91e46dccc389ad8ea5dd5f9eaed  gcc/m2/gm2-libs-log/InOut.mod
  a03e7ac626c4153628f9a55ff67b1414  gcc/m2/gm2-libs-log/Keyboard.def
  5c23f823ba8713af6603b6786ded29c3  gcc/m2/gm2-libs-log/Keyboard.mod
  4ca2609946edd2a99dffa88148791946  gcc/m2/gm2-libs-log/LongIO.def
*************** dbd2f1220cd00cb166d430e11003798c  gcc/m2
*** 7138,7145 ****
  856bb5f6b8f838bb3b97497fe621a6cc  gcc/m2/gm2-libs-log/RealConversions.mod
  4f74af695bdb36d6459b399529d1d885  gcc/m2/gm2-libs-log/RealInOut.def
  ce44025754e0820981b9e02283f5870e  gcc/m2/gm2-libs-log/RealInOut.mod
! fe1be55a46a939f7a405a22881b0f687  gcc/m2/gm2-libs-log/Strings.def
! db1694f61023246efd23d237eb996c21  gcc/m2/gm2-libs-log/Strings.mod
  1d939ca3cbaea49fa509701d1d4b8939  gcc/m2/gm2-libs-log/Termbase.def
  63ff4644bc359f6d9109230a394d407c  gcc/m2/gm2-libs-log/Termbase.mod
  42b80fc3e8510dee78249d5e7a87c6db  gcc/m2/gm2-libs-log/Terminal.def
--- 7140,7147 ----
  856bb5f6b8f838bb3b97497fe621a6cc  gcc/m2/gm2-libs-log/RealConversions.mod
  4f74af695bdb36d6459b399529d1d885  gcc/m2/gm2-libs-log/RealInOut.def
  ce44025754e0820981b9e02283f5870e  gcc/m2/gm2-libs-log/RealInOut.mod
! 8c6c0b7ec2010aa39e9a7b9c4ce06fda  gcc/m2/gm2-libs-log/Strings.def
! 35444e4764abdaec69775a8063ce2f6b  gcc/m2/gm2-libs-log/Strings.mod
  1d939ca3cbaea49fa509701d1d4b8939  gcc/m2/gm2-libs-log/Termbase.def
  63ff4644bc359f6d9109230a394d407c  gcc/m2/gm2-libs-log/Termbase.mod
  42b80fc3e8510dee78249d5e7a87c6db  gcc/m2/gm2-libs-log/Terminal.def
*************** bdf8e4e5301538b72767dc22581f3f7f  gcc/m2
*** 7152,7157 ****
--- 7154,7161 ----
  4a2d9a87b99d093e73909811facfba11  gcc/m2/gm2-libs-min/SYSTEM.mod
  6066eff2e23b028b779eab8f65a6cdb8  gcc/m2/gm2-libs-min/libc.c
  28dd7c1333503f47c1b34cbbedb9bd6c  gcc/m2/gm2-libs-min/libc.def
+ a536407a602f6237b202eb11c825a25e  gcc/m2/gm2-libs/ARRAYOFCHAR.def
+ e4d6174f6234cab567e116421712d7e3  gcc/m2/gm2-libs/ARRAYOFCHAR.mod
  0c0b70f740fb2aa15f3cd8ffa440bcad  gcc/m2/gm2-libs/ASCII.def
  8029a2f255a54f322fdd3b21c36b55f7  gcc/m2/gm2-libs/ASCII.mod
  68badbf0d3b417721274234d3a599134  gcc/m2/gm2-libs/Args.def
*************** aaf3e76436ae06a23600b884df25b479  gcc/m2
*** 7162,7167 ****
--- 7166,7174 ----
  0279b6197a1ac8020581bf9617f096c1  gcc/m2/gm2-libs/Break.mod
  9b18ce2868838c9ac24c173a65f40025  gcc/m2/gm2-libs/Builtins.def
  2e88c6b3000b5a048142be3323428a9a  gcc/m2/gm2-libs/Builtins.mod
+ f3f1821c9653cd795a6e0f0bbf2390de  gcc/m2/gm2-libs/CFileSysOp.def
+ f4cf4d8ab15291cf3125519c6568c434  gcc/m2/gm2-libs/CHAR.def
+ ce54ff0a1cc024cd31d69c3d7151561c  gcc/m2/gm2-libs/CHAR.mod
  093dac02bcfff5dad90c7fceeb93b9d4  gcc/m2/gm2-libs/COROUTINES.def
  0855cc9b09be34165c84ebe153d5ce0c  gcc/m2/gm2-libs/COROUTINES.mod
  18d09b4740fb69fea7773f675cc1053d  gcc/m2/gm2-libs/CmdArgs.def
*************** d6f94e02e9940d96ad9edcbb3b371f49  gcc/m2
*** 7174,7179 ****
--- 7181,7188 ----
  0dde314513020c8101bae6227dc7d4d4  gcc/m2/gm2-libs/Environment.mod
  34fadb2b6843988e6914d1436e56f4fc  gcc/m2/gm2-libs/FIO.def
  861b03d675f63653f159204dafbc300f  gcc/m2/gm2-libs/FIO.mod
+ 778d1ff012b61101cb234ca5b9ef9146  gcc/m2/gm2-libs/FileSysOp.def
+ 3a3c2b8ed0b5f9b1297332990036351a  gcc/m2/gm2-libs/FileSysOp.mod
  972105c4bd1196ec3fe7f29c84965fb1  gcc/m2/gm2-libs/FormatStrings.def
  bd7aee38dfe1f7908bdec7c13e1329c4  gcc/m2/gm2-libs/FormatStrings.mod
  41a0e4587ebf7b17402d7378e43a4855  gcc/m2/gm2-libs/FpuIO.def
*************** afec185c1e66724107d47726d26f3ac8  gcc/m2
*** 7215,7222 ****
  bd66d44a1bb8a99631155e33ed5ea8cb  gcc/m2/gm2-libs/SCmdArgs.mod
  843897f2e3c461fb0327fb0c60ac59a6  gcc/m2/gm2-libs/SEnvironment.def
  6b7065b7f149a2b0d03fffe13bfbdd0a  gcc/m2/gm2-libs/SEnvironment.mod
! d590dd8538572ce2c7231a25b8eeb326  gcc/m2/gm2-libs/SFIO.def
! ea36e7e8b1f3fca86b5a0b2ca1f23ba5  gcc/m2/gm2-libs/SFIO.mod
  9222eb07c9f464434ed0f4b515cb19be  gcc/m2/gm2-libs/SMathLib0.def
  e17c6bf3bc3dafb2f4245566929a76c2  gcc/m2/gm2-libs/SMathLib0.mod
  185045150fb7863ccda3dda3df51b72e  gcc/m2/gm2-libs/SYSTEM.def
--- 7224,7231 ----
  bd66d44a1bb8a99631155e33ed5ea8cb  gcc/m2/gm2-libs/SCmdArgs.mod
  843897f2e3c461fb0327fb0c60ac59a6  gcc/m2/gm2-libs/SEnvironment.def
  6b7065b7f149a2b0d03fffe13bfbdd0a  gcc/m2/gm2-libs/SEnvironment.mod
! f20062f975b85328d9e6b331594e25ef  gcc/m2/gm2-libs/SFIO.def
! 333702071f6295fe11f5a10f9f46a356  gcc/m2/gm2-libs/SFIO.mod
  9222eb07c9f464434ed0f4b515cb19be  gcc/m2/gm2-libs/SMathLib0.def
  e17c6bf3bc3dafb2f4245566929a76c2  gcc/m2/gm2-libs/SMathLib0.mod
  185045150fb7863ccda3dda3df51b72e  gcc/m2/gm2-libs/SYSTEM.def
*************** f5f27a5983f141be65a0627b66de7763  gcc/m2
*** 7234,7241 ****
--- 7243,7254 ----
  e30a0c0009f59e0d820cabb9ad9c48a9  gcc/m2/gm2-libs/StrIO.mod
  7234614cffc5479fba49d8079bf71271  gcc/m2/gm2-libs/StrLib.def
  39540142c68a33e144e9e9a66a8797ae  gcc/m2/gm2-libs/StrLib.mod
+ d856fab79aab71626127ae645d32826f  gcc/m2/gm2-libs/String.def
+ ca53d6119b3cacaa5709bea08344f588  gcc/m2/gm2-libs/String.mod
  f1d0448dddb0806234b4324974795511  gcc/m2/gm2-libs/StringConvert.def
  2827fc85c18fb254b57b06d1940f568d  gcc/m2/gm2-libs/StringConvert.mod
+ cfb8769699afb47506e59253ad077e03  gcc/m2/gm2-libs/StringFileSysOp.def
+ 8885e0f3776e679ed8d88fbc864757ee  gcc/m2/gm2-libs/StringFileSysOp.mod
  3602d43cda7124c63c9282bf1c8e57ba  gcc/m2/gm2-libs/SysExceptions.def
  324436308b22132f485cfe41190a5ffb  gcc/m2/gm2-libs/SysStorage.def
  bcf371a42b660b666ae976ce40ee34ff  gcc/m2/gm2-libs/SysStorage.mod
*************** a7f71bd9b880673b18abd6ab022331c1  gcc/m2
*** 7601,7611 ****
  cfd0eda3744ba9d00f0c88d3762d7f06  gcc/m2/pge-boot/network.cc
  18840892def349c0982fbe40111d6a91  gcc/m2/plugin/README
  dd0625a7245e019bcefa8581aac88a27  gcc/m2/plugin/m2rte.cc
! b6e5f0da274b54528dae320c9d012d8b  gcc/m2/target-independent/m2/Builtins.texi
! ff2cddc8e82d26e626d51a518f97024d  gcc/m2/target-independent/m2/SYSTEM-iso.texi
! 803e2e2c4293fdba546b2340322ba0ce  gcc/m2/target-independent/m2/SYSTEM-pim.texi
  03eaafb97c5c63c6a17ffd76fa52f53c  gcc/m2/target-independent/m2/gm2-ebnf.texi
! 3cf6d843de6e7d2300339c7bf62741b5  gcc/m2/target-independent/m2/gm2-libs.texi
  3eed1eee3be7e4c14fa1d8f611ab2c90  gcc/m2/target-independent/m2/gpl_v3_without_node.texi
  90ef5843055db95072a5e0dcaad1e694  gcc/m2/target-independent/readme.txt
  7625da2d2347161386e94664ab2ceac9  gcc/m2/tools-src/README
--- 7614,7624 ----
  cfd0eda3744ba9d00f0c88d3762d7f06  gcc/m2/pge-boot/network.cc
  18840892def349c0982fbe40111d6a91  gcc/m2/plugin/README
  dd0625a7245e019bcefa8581aac88a27  gcc/m2/plugin/m2rte.cc
! 0660bb99723628b350ba665f6a743603  gcc/m2/target-independent/m2/Builtins.texi
! 8007d011990ec6a27344c59375b632b5  gcc/m2/target-independent/m2/SYSTEM-iso.texi
! af715e0938ee1e3521e0d6aeb1546db9  gcc/m2/target-independent/m2/SYSTEM-pim.texi
  03eaafb97c5c63c6a17ffd76fa52f53c  gcc/m2/target-independent/m2/gm2-ebnf.texi
! 1a552f609a016d52022a219337b97975  gcc/m2/target-independent/m2/gm2-libs.texi
  3eed1eee3be7e4c14fa1d8f611ab2c90  gcc/m2/target-independent/m2/gpl_v3_without_node.texi
  90ef5843055db95072a5e0dcaad1e694  gcc/m2/target-independent/readme.txt
  7625da2d2347161386e94664ab2ceac9  gcc/m2/tools-src/README
*************** fccd951e3de91d49d3824e482c12e070  gcc/or
*** 7714,7720 ****
  c77558a1c1f43463b3acae9243006ef9  gcc/output.h
  c9e6163e1eaa8f82c57f03f76e86da75  gcc/pair-fusion.cc
  b2f692287d25760afcef126c010f7078  gcc/pair-fusion.h
! 4a9501d30382fb23d331cf9fb76d5531  gcc/params.opt
  2cc794e23d80a8c9f057a7e402c65fb8  gcc/params.opt.urls
  82f4a87ff4fd2d77e57f3f46d6e0c197  gcc/pass_manager.h
  1a496be43b4e534d45cbad96b36be29d  gcc/passes.cc
--- 7727,7733 ----
  c77558a1c1f43463b3acae9243006ef9  gcc/output.h
  c9e6163e1eaa8f82c57f03f76e86da75  gcc/pair-fusion.cc
  b2f692287d25760afcef126c010f7078  gcc/pair-fusion.h
! 98796ef3b5d188163285b9ee4f601424  gcc/params.opt
  2cc794e23d80a8c9f057a7e402c65fb8  gcc/params.opt.urls
  82f4a87ff4fd2d77e57f3f46d6e0c197  gcc/pass_manager.h
  1a496be43b4e534d45cbad96b36be29d  gcc/passes.cc
*************** c08edc659010d9072c249418c1be7fe6  gcc/rt
*** 7849,7855 ****
  ecb31a48caf7998f695601ec7350bdc0  gcc/run-rtl-passes.cc
  c4bc204b62fdb61848c09abf05a60a9d  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! 0199b39bcd9406b266d1a3593969c816  gcc/rust/ChangeLog
  c2a8648800b13beaa7b2efef8e94ea6f  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  1bde08bec2946c34ff76bc8cdc25d05c  gcc/rust/ast/rust-ast-builder-type.cc
--- 7862,7868 ----
  ecb31a48caf7998f695601ec7350bdc0  gcc/run-rtl-passes.cc
  c4bc204b62fdb61848c09abf05a60a9d  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! ee58c7a7f9b0deb825fe3b4ac3c10b1d  gcc/rust/ChangeLog
  c2a8648800b13beaa7b2efef8e94ea6f  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  1bde08bec2946c34ff76bc8cdc25d05c  gcc/rust/ast/rust-ast-builder-type.cc
*************** c191f60cd765582e6056c6e2f13b906a  gcc/ru
*** 8004,8013 ****
  3d1d580931425b21ef771bb7fbc06269  gcc/rust/checks/errors/borrowck/rust-bir-dump.h
  ac4645a6b64765a8b1a069123b36a51d  gcc/rust/checks/errors/borrowck/rust-bir-fact-collector.h
  7bad83dd9989404f07d5e701e33f41bc  gcc/rust/checks/errors/borrowck/rust-bir-free-region.h
! 9b90fb36de49b27afbfd8ac510deb304  gcc/rust/checks/errors/borrowck/rust-bir-place.h
  c155995ce485ce0e9a21876183c1a9bb  gcc/rust/checks/errors/borrowck/rust-bir-visitor.h
! 3f3f1b80158f254c3d0e6d9eef3ee77f  gcc/rust/checks/errors/borrowck/rust-bir.h
! 5e2b21dc5728d65e4f86b2b882432ec4  gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
  e30cd7ae36132321a16ee23e46ef569d  gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.h
  8a4b180b21798e53955cc8d26ee08af1  gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc
  6998d3562ab4b5a22db0a644a774bf34  gcc/rust/checks/errors/borrowck/rust-borrow-checker.h
--- 8017,8026 ----
  3d1d580931425b21ef771bb7fbc06269  gcc/rust/checks/errors/borrowck/rust-bir-dump.h
  ac4645a6b64765a8b1a069123b36a51d  gcc/rust/checks/errors/borrowck/rust-bir-fact-collector.h
  7bad83dd9989404f07d5e701e33f41bc  gcc/rust/checks/errors/borrowck/rust-bir-free-region.h
! 63a28af321731b1ddb6fd4a779bfa851  gcc/rust/checks/errors/borrowck/rust-bir-place.h
  c155995ce485ce0e9a21876183c1a9bb  gcc/rust/checks/errors/borrowck/rust-bir-visitor.h
! 7333a5b4ee8d7bed652435c73523a459  gcc/rust/checks/errors/borrowck/rust-bir.h
! c62ad0b7d7912fb0902b5edd26c0239a  gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
  e30cd7ae36132321a16ee23e46ef569d  gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.h
  8a4b180b21798e53955cc8d26ee08af1  gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc
  6998d3562ab4b5a22db0a644a774bf34  gcc/rust/checks/errors/borrowck/rust-borrow-checker.h
*************** b1497a03867668af210c32280876fdd7  gcc/sy
*** 8430,8436 ****
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 11843758bc16e7603b05a3ed6670b70b  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8443,8449 ----
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 9e6a71a4fa7145fec9e58e0f19f3e540  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** d76b3d7c76bf8188c7a40f1ba48918e3  gcc/te
*** 14458,14464 ****
  6cd7ebc8aedad12736b72743c46b506c  gcc/testsuite/cobol.dg/group2/FUNCTION_CURRENT-DATE.cob
  354b0f9ee82914d81ffcc8cb34984d3b  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-OF-INTEGER.cob
  c481daf6786a601dbb8ebd9a48ff9322  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-TO-YYYYMMDD.cob
! fa6888626aa5c145142bb07dca431fe0  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
  1309189851fee6dc1ba1bebf5399612e  gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-OF-INTEGER.cob
  7183c16a31e41cbf8e027c2e5a6e2d6c  gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-TO-YYYYDDD.cob
  1237c3e824a48b7ee7e38a3d1763dfb0  gcc/testsuite/cobol.dg/group2/FUNCTION_E.cob
--- 14471,14477 ----
  6cd7ebc8aedad12736b72743c46b506c  gcc/testsuite/cobol.dg/group2/FUNCTION_CURRENT-DATE.cob
  354b0f9ee82914d81ffcc8cb34984d3b  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-OF-INTEGER.cob
  c481daf6786a601dbb8ebd9a48ff9322  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-TO-YYYYMMDD.cob
! 70cf5ac189c15684c393af586cad6d38  gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
  1309189851fee6dc1ba1bebf5399612e  gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-OF-INTEGER.cob
  7183c16a31e41cbf8e027c2e5a6e2d6c  gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-TO-YYYYDDD.cob
  1237c3e824a48b7ee7e38a3d1763dfb0  gcc/testsuite/cobol.dg/group2/FUNCTION_E.cob
*************** f4f262de9adf968192a3da56a3c4adc1  gcc/te
*** 16597,16602 ****
--- 16610,16616 ----
  0a27a7a45bdad25c5a48b1f4e3bfcb8b  gcc/testsuite/g++.dg/cpp0x/constexpr-array26.C
  3100c3b4b2ec90a6762a56edc16076a1  gcc/testsuite/g++.dg/cpp0x/constexpr-array27.C
  216c8de64dd9752d2d84eb202e80c708  gcc/testsuite/g++.dg/cpp0x/constexpr-array28.C
+ 1c4a44e298a16b855d3f955b665c3dc6  gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C
  8b7c8e7c1b64cfa0626f7f2311c9fef5  gcc/testsuite/g++.dg/cpp0x/constexpr-array3.C
  6451aa5bb5fa736dda3ebad1dc2e8336  gcc/testsuite/g++.dg/cpp0x/constexpr-array4.C
  1d46f32449f9e0292d662928246ec784  gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C
*************** a36b5332929fccce3ba46aacdd6e1984  gcc/te
*** 38510,38515 ****
--- 38524,38530 ----
  ae878ea349c8f9f2a197bf59dcff9d3a  gcc/testsuite/gcc.c-torture/compile/pr118429.c
  6d7416e999725c0f023c4322893b1214  gcc/testsuite/gcc.c-torture/compile/pr118501.c
  4e917b913d6f56bf343a7bff79797c93  gcc/testsuite/gcc.c-torture/compile/pr119226.c
+ ba307c947af4df2e0ff2f70272caf68a  gcc/testsuite/gcc.c-torture/compile/pr120807.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
*************** d217543f954eb3f31e246355824f653a  gcc/te
*** 43232,43237 ****
--- 43247,43253 ----
  2cdc0474f10fd564ead32c0c64a2d7c8  gcc/testsuite/gcc.dg/bitint-121.c
  43db7c5f800ce763fcf885501389882a  gcc/testsuite/gcc.dg/bitint-122.c
  7d02ff9539e664bbbcfc85b464d916c1  gcc/testsuite/gcc.dg/bitint-123.c
+ 11e6d8eaf7b16f3f8aeaf1c2e626996f  gcc/testsuite/gcc.dg/bitint-124.c
  aa6e262f1d508ec048e76ac4af6675a4  gcc/testsuite/gcc.dg/bitint-13.c
  e6db29256563268a3c327706e78c79a4  gcc/testsuite/gcc.dg/bitint-14.c
  c748706240385773f27caba61cbbcbd8  gcc/testsuite/gcc.dg/bitint-15.c
*************** cd7e1393f86e16932f88281f0cf7179c  gcc/te
*** 45233,45238 ****
--- 45249,45255 ----
  fc4acd5b10b8ffd5f7d85c70f8612075  gcc/testsuite/gcc.dg/crc-from-fedora-packages-7.c
  e5458520823e4db0844fa819e683dcc1  gcc/testsuite/gcc.dg/crc-from-fedora-packages-8.c
  06cd581bcc64f0bc0cbda9ac9a995745  gcc/testsuite/gcc.dg/crc-from-fedora-packages-9.c
+ 9c9dbbd13e526d9a458386d13227233f  gcc/testsuite/gcc.dg/crc-non-cst-poly-1.c
  2eb411ae3a297c956cb543ee15b86d4b  gcc/testsuite/gcc.dg/crc-not-crc-1.c
  58b7470978bfd2b8501ae0e58aaa708f  gcc/testsuite/gcc.dg/crc-not-crc-10.c
  faa8d6691182cb654da70f6633cff01b  gcc/testsuite/gcc.dg/crc-not-crc-11.c
*************** cb7b5505103ef079e746dd619a21ee86  gcc/te
*** 49457,49462 ****
--- 49474,49480 ----
  5db833c38de3e5ade44290c729fb748c  gcc/testsuite/gcc.dg/pr120074.c
  9444444b4f048eadd4b6a2d7592f5fca  gcc/testsuite/gcc.dg/pr120480.c
  4a9d9632d82cf6c4f4f4acbad8ab018d  gcc/testsuite/gcc.dg/pr120638.c
+ c57884e34f257e33d206372fc675b716  gcc/testsuite/gcc.dg/pr121035.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** acc45859ec226bf8d285f9821bc84cff  gcc/te
*** 53174,53184 ****
--- 53192,53206 ----
  faa7f4600800bdbdaab47877d0fb7746  gcc/testsuite/gcc.dg/torture/pr120043.c
  e1b9ad351c56aebfaff790ff4002bf6e  gcc/testsuite/gcc.dg/torture/pr120182.c
  0c3297c6ebf6e4adcaeec164dfe8e9ac  gcc/testsuite/gcc.dg/torture/pr120211-1.c
+ 68b7b9a81ceb31b6b33b9a797a7f6c30  gcc/testsuite/gcc.dg/torture/pr120242.c
  e9469d38b4234580f9b2284233404b3c  gcc/testsuite/gcc.dg/torture/pr120341-1.c
  aef01c040da8abd2a1e547ed6a07eb5a  gcc/testsuite/gcc.dg/torture/pr120341-2.c
  12e839fd30c3a301bab4708aee3c9815  gcc/testsuite/gcc.dg/torture/pr120347.c
  590593d14c26e1d9ed776d01fc734a3c  gcc/testsuite/gcc.dg/torture/pr120369-1.c
+ 437bb98a945fa9a075fd7999043aea48  gcc/testsuite/gcc.dg/torture/pr120627.c
  e6e17b2280f19928b738f46328c5dcf7  gcc/testsuite/gcc.dg/torture/pr120654.c
+ d9a43196d2efe2fcc49c98e125a9d6b3  gcc/testsuite/gcc.dg/torture/pr120736.c
+ a789d5fa70ddcb7ea1760ee8688e331c  gcc/testsuite/gcc.dg/torture/pr120813.c
  e23df6b1422011499b9a500d2bf25add  gcc/testsuite/gcc.dg/torture/pr120944.c
  ded4330fd1cd52783bd9b1761db038ef  gcc/testsuite/gcc.dg/torture/pr16104-1.c
  fc265ee05da2f29f0e92804661cd1f28  gcc/testsuite/gcc.dg/torture/pr17526.c
*************** bb6370e51fdfc71eb406f2d9d7e1f004  gcc/te
*** 57092,57097 ****
--- 57114,57120 ----
  a0d21e844c69e57b42877341fb99cf0d  gcc/testsuite/gcc.dg/uninit-pr111397.c
  499c474f28073285766d0bb22cfa9e09  gcc/testsuite/gcc.dg/uninit-pr111489.c
  1f3e810920438ffd137d7d7c1975faef  gcc/testsuite/gcc.dg/uninit-pr112909.c
+ aa0889e8d086eec285bed548dc7a6709  gcc/testsuite/gcc.dg/uninit-pr120924.c
  58c1fce493b489aff04e0b2f66635e90  gcc/testsuite/gcc.dg/uninit-pr19430-2.c
  79f653fd913dfd35f07e5b3890168e74  gcc/testsuite/gcc.dg/uninit-pr19430-O0.c
  0ba39e72d317abfcfd3703541b7f8a41  gcc/testsuite/gcc.dg/uninit-pr19430.c
*************** f5749a6330ea4377b859350a23760b4a  gcc/te
*** 57870,57875 ****
--- 57893,57900 ----
  c5b12e4f92ab5e7e64670a57c8f91e86  gcc/testsuite/gcc.dg/vect/pr119640.c
  ae171ef5347c321225b18e5907b1331b  gcc/testsuite/gcc.dg/vect/pr119757.c
  7df91aea22a8a2dc08bd0d355fa30fae  gcc/testsuite/gcc.dg/vect/pr120817.c
+ ea5b3c05fffa7f697082308298dd7c5c  gcc/testsuite/gcc.dg/vect/pr121049.c
+ 3ccd618a730abdb13ec305c26f14ac22  gcc/testsuite/gcc.dg/vect/pr121059.c
  42d48d2ecd5682545b12ac42f879a831  gcc/testsuite/gcc.dg/vect/pr16105.c
  231c99dba9475fe09525bbf6f4374124  gcc/testsuite/gcc.dg/vect/pr18308.c
  915cf38408eaa7fee5013d90ec1c3251  gcc/testsuite/gcc.dg/vect/pr18400.c
*************** f6df41d6d0c00a657a60617993e7fd37  gcc/te
*** 68018,68023 ****
--- 68043,68049 ----
  f5f6f291e9c1c848a46c8ef91ca99f58  gcc/testsuite/gcc.target/aarch64/sve2/pr107830-2.c
  429b387819fe31e459436020f966ae50  gcc/testsuite/gcc.target/aarch64/sve2/pr109636_1.c
  b1f13471701b0335894317ae214cc68c  gcc/testsuite/gcc.target/aarch64/sve2/pr116934.c
+ 3fcc51d99dc7ff15a8bb60da25dc470e  gcc/testsuite/gcc.target/aarch64/sve2/pr120999.c
  3ddfd16fcbf89890fd9785fec8f0c081  gcc/testsuite/gcc.target/aarch64/sve2/shracc_1.c
  8cd4d6e010de57b57d5d8fb325fa79bb  gcc/testsuite/gcc.target/aarch64/sve2/unpred_mul_1.c
  5305258327c11f42a3de08b7708ebd76  gcc/testsuite/gcc.target/aarch64/sve2/uzpq_1.c
*************** d3f15f077bac4fdd98e262ff70319e29  gcc/te
*** 73619,73628 ****
  99e6ee6f6a0dd25151f9bd8e0350a8c3  gcc/testsuite/gcc.target/i386/amx-helper.h
  a93a298f547274ed3c2b935fceada10f  gcc/testsuite/gcc.target/i386/amxavx512-asmatt-1.c
  6a5fd66cc81baab9cac7cbbacb5f044a  gcc/testsuite/gcc.target/i386/amxavx512-asmintel-1.c
! 086de4ec2b822f365800b525b968e32f  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c
! b3dadadaf5b2a3516befbed4547e7457  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c
! 6ca460c28ecf6578a2f9ea76b0f25008  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c
! a085494420c0f8c81550255b2f48f14e  gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c
  3e5ed8f51d1403b179db592f12cb019c  gcc/testsuite/gcc.target/i386/amxbf16-asmatt-1.c
  215b9569abd57352c2d13ba5129e07cd  gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c
  c4406ef230e7a6bb0e7b45b2f94958e9  gcc/testsuite/gcc.target/i386/amxbf16-dpbf16ps-2.c
--- 73645,73654 ----
  99e6ee6f6a0dd25151f9bd8e0350a8c3  gcc/testsuite/gcc.target/i386/amx-helper.h
  a93a298f547274ed3c2b935fceada10f  gcc/testsuite/gcc.target/i386/amxavx512-asmatt-1.c
  6a5fd66cc81baab9cac7cbbacb5f044a  gcc/testsuite/gcc.target/i386/amxavx512-asmintel-1.c
! 03b019d3c75ebd24b04404c883e8fb8f  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c
! 6752e96664d9f58cb984fa646411e1a8  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c
! de43766ff547a704d67f8c662bc93c66  gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c
! cc0603febc979dbf700b27494eacbc42  gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c
  3e5ed8f51d1403b179db592f12cb019c  gcc/testsuite/gcc.target/i386/amxbf16-asmatt-1.c
  215b9569abd57352c2d13ba5129e07cd  gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c
  c4406ef230e7a6bb0e7b45b2f94958e9  gcc/testsuite/gcc.target/i386/amxbf16-dpbf16ps-2.c
*************** ef2cdb48cbe0dedfce0d7eb770a1f30f  gcc/te
*** 79697,79702 ****
--- 79723,79729 ----
  3cee806d4474b5711bc99a7abe73cadc  gcc/testsuite/gcc.target/i386/pr119549.c
  bb420ee68e25b3f2c223a9b99a8e7c79  gcc/testsuite/gcc.target/i386/pr119784a.c
  038406363ec46be9b531268d03546b94  gcc/testsuite/gcc.target/i386/pr119784b.c
+ e33b63cd8f6d60b286b2286424f25714  gcc/testsuite/gcc.target/i386/pr120908.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
*************** af673fd936a552ae3aedf768019c6080  gcc/te
*** 87443,87448 ****
--- 87470,87476 ----
  d8510639d34708be4eb4fdeef2f8cdee  gcc/testsuite/gcc.target/riscv/amo/zabha-rvwmo-all-amo-ops-short.c
  5dc8c5de864176c303482f4ee3560e6b  gcc/testsuite/gcc.target/riscv/amo/zabha-rvwmo-amo-add-char.c
  aea5ac9b0550389fe61914a7a05876ca  gcc/testsuite/gcc.target/riscv/amo/zabha-rvwmo-amo-add-short.c
+ 0c9457a4281c35609e862771f98daac9  gcc/testsuite/gcc.target/riscv/amo/zabha-zacas-atomic-cas.c
  f9f907d8ca89ee35a4a0b608ff69ea76  gcc/testsuite/gcc.target/riscv/amo/zabha-zacas-preferred-over-zalrsc.c
  16af30431d049c7f5f0470b60d6df829  gcc/testsuite/gcc.target/riscv/amo/zabha-ztso-amo-add-char.c
  f0dbf1bd5383961cb841eaf14aabd3a2  gcc/testsuite/gcc.target/riscv/amo/zabha-ztso-amo-add-short.c
*************** a7cdfe664ef8616a70af588b3a79aa27  gcc/te
*** 88314,88319 ****
--- 88342,88349 ----
  8c4f6b44c5539860ac14e0e52ee563cd  gcc/testsuite/gcc.target/riscv/pr118146-1.c
  b22a15e86fb70037feb383a055b6e153  gcc/testsuite/gcc.target/riscv/pr118146-2.c
  1fa594621b25166287d6d30b0daf189b  gcc/testsuite/gcc.target/riscv/pr118170.c
+ 2bc8f4e965541e4fc96271a069a25fb6  gcc/testsuite/gcc.target/riscv/pr118241-b.cc
+ b2926d7d0c3ebd0521abd5b1bd13e5f8  gcc/testsuite/gcc.target/riscv/pr118241.c
  8c91cf2796ff0e2ea816e9d35b520e8d  gcc/testsuite/gcc.target/riscv/pr118248.c
  b62a32eafb5e661786b5ef2b03b30be9  gcc/testsuite/gcc.target/riscv/pr119971.c
  37a08389ba95284cc27832767dfc1430  gcc/testsuite/gcc.target/riscv/pr43644.c
*************** e5794d88a1109065814ce4f8f2246087  gcc/te
*** 89106,89111 ****
--- 89136,89142 ----
  1064dbbae3b2f7e04909839e8152b061  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118950.c
  e7ca8fe6239410f9affbff1106fd2d15  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr119114.c
  446b0327be112ddedf3f8db6bc96d603  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr119224.c
+ 97a2ebde6fd6564be1fe7abc131eb066  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c
  ee8bcba5f6876f2027f0f263f81465aa  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-1.c
  7ff884bfa2e6cf9bc4c6172466538515  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-10.c
  b2792e9264dcd6fa2e88f495d51677e6  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-11.c
*************** eede070a28c17448e8635dfa208829ae  gcc/te
*** 99637,99642 ****
--- 99668,99674 ----
  084d73893a30ee8bc9420fc82f944f3c  gcc/testsuite/gfortran.dg/asan/asan.exp
  3b8425a2f59699b47aac6da29c11aba9  gcc/testsuite/gfortran.dg/asan/associate_58.f90
  e9f58df1de071d2b106b16b3af8f6764  gcc/testsuite/gfortran.dg/asan/associate_59.f90
+ 32f63bfc5a1fd9dda988b63c860b03bd  gcc/testsuite/gfortran.dg/asan/finalize_1.f90
  66de6cb3bf07d14487491fac7d1ee72f  gcc/testsuite/gfortran.dg/asan/pointer_assign_16.f90
  68c306b7235f43b669fee04a590362d9  gcc/testsuite/gfortran.dg/asan/pr110415-2.f90
  5ba36953a293a48947580de915906563  gcc/testsuite/gfortran.dg/asan/pr110415-3.f90
*************** d3d333698144b6bad92425ebed117768  gcc/te
*** 99732,99737 ****
--- 99764,99770 ----
  654126432f7002148884d08affd35699  gcc/testsuite/gfortran.dg/associate_72.f90
  e0fe6119bfcf724ee51375d3156cacc5  gcc/testsuite/gfortran.dg/associate_73.f90
  151edd623643e466e74fa24488fd3142  gcc/testsuite/gfortran.dg/associate_74.f90
+ 9324e6abeab7018b1551e0a075cd2085  gcc/testsuite/gfortran.dg/associate_75.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
*************** a1a9be8c9080ba2ba338bc6f63b406e3  gcc/te
*** 103045,103050 ****
--- 103078,103084 ----
  f523f11e31c8d7a378a90e54f4cc9a88  gcc/testsuite/gfortran.dg/gomp/pr103643.f90
  8d0eb4ba7d5d6e2c9ffeb53bd0b900ec  gcc/testsuite/gfortran.dg/gomp/pr103695.f90
  b229abc8cb06bd3633deb0bb940ede08  gcc/testsuite/gfortran.dg/gomp/pr104131.f90
+ 3a0477f99d8b3db6f5412df79f7e0e6e  gcc/testsuite/gfortran.dg/gomp/pr104428.f90
  39842b4010b4165bbe821ffc8a903991  gcc/testsuite/gfortran.dg/gomp/pr104757.f90
  b0de5c5053146f58fe1939b9523524e5  gcc/testsuite/gfortran.dg/gomp/pr104826.f90
  02981b5d8f6403bdc6a2dfd0100dcc74  gcc/testsuite/gfortran.dg/gomp/pr107214-2.f90
*************** f37df132a6d1265e9833af11738799ad  gcc/te
*** 108472,108480 ****
--- 108506,108516 ----
  b45afeaab70f1f8a13e0efe9b2520a3c  gcc/testsuite/gm2/iso/extended-opaque/pass/stressset.def
  5769b725a73103f0bfd47f99925f7b77  gcc/testsuite/gm2/iso/extended-opaque/pass/stressset.mod
  5f617579b6549693c5867d12168bd834  gcc/testsuite/gm2/iso/extended-opaque/pass/testset.mod
+ dd62aea9ecf3ee966fdbe990c06704ab  gcc/testsuite/gm2/iso/fail/CHAR.mod
  74e6d5d98b64c8e15038da1eb20fc083  gcc/testsuite/gm2/iso/fail/arraymismatch.mod
  2aeb1840a853d9bd6dd61d9278a7b6a1  gcc/testsuite/gm2/iso/fail/badarray.mod
  5d08cec83a9fd8cfa6b718baa93a2715  gcc/testsuite/gm2/iso/fail/badarray2.mod
+ 58fa04b34b089f4e639362653e1de965  gcc/testsuite/gm2/iso/fail/badarray3.mod
  08d72567eef98d824fdfea58dfd60bd0  gcc/testsuite/gm2/iso/fail/badassignment.mod
  026dcc0bc12873120c33bc438c0da31f  gcc/testsuite/gm2/iso/fail/badexpression.mod
  9dc1926fc7f59c0f1a31e62270e201f0  gcc/testsuite/gm2/iso/fail/badexpression2.mod
*************** c5ec5527b4bca04a200369be3b0d5133  gcc/te
*** 108490,108495 ****
--- 108526,108533 ----
  5ed1fa10cc675bda041dcdeeed28c41f  gcc/testsuite/gm2/iso/fail/badparam4.mod
  fecf4459acd65abc1b71561dc22d7689  gcc/testsuite/gm2/iso/fail/badparamarray.def
  8d98913215f9c558c4398522b8124ee1  gcc/testsuite/gm2/iso/fail/badparamarray.mod
+ 518c491ae8e4302554ef1995489cf08f  gcc/testsuite/gm2/iso/fail/badreturn.mod
+ 0bb573a71a0bb154185c5bcf52cef146  gcc/testsuite/gm2/iso/fail/badreturn2.mod
  4b91e3c389b30ac1774c9b61dccd90e1  gcc/testsuite/gm2/iso/fail/badset.mod
  4860278d84989ec562b892a13b6447ec  gcc/testsuite/gm2/iso/fail/badset2.mod
  dfcc6ecdf732afd377ec852b928da44c  gcc/testsuite/gm2/iso/fail/badset3.mod
*************** debbfd5917212ec7f4292381bb96ac54  gcc/te
*** 108587,108592 ****
--- 108625,108632 ----
  bf612e7d4b783c9e3495dec78e22634f  gcc/testsuite/gm2/iso/pass/isobitset2.mod
  5098f5609c0fb8e2e4faf8952d01dbf5  gcc/testsuite/gm2/iso/pass/longm.mod
  7caed1298e8e2fbc90e6fd77362e42f6  gcc/testsuite/gm2/iso/pass/m.mod
+ 7e81d8971a9f312ae0301b767eceaea5  gcc/testsuite/gm2/iso/pass/modulereturn.mod
+ 33f28bac3d16ef081c2504dafdd55f73  gcc/testsuite/gm2/iso/pass/modulereturn2.mod
  4aadbdc5a6663a31ae9d1d45a3ae1484  gcc/testsuite/gm2/iso/pass/proccast.mod
  8e92d1b76d700c108585fbcb6420ea2c  gcc/testsuite/gm2/iso/pass/realbitscast.mod
  238d44ce7ade63d31b039cc51513a564  gcc/testsuite/gm2/iso/pass/set12.mod
*************** e9bd0ecc9dd48042c7ba73738af78def  gcc/te
*** 108618,108623 ****
--- 108658,108664 ----
  1fbd81cab810f2270cb080d5d9dd1865  gcc/testsuite/gm2/iso/pass/testrotate.mod
  a8dfff8749defc38e520cb1cb7e81369  gcc/testsuite/gm2/iso/pass/unbounded.mod
  e189208c21019fb1a7863f3962e87c90  gcc/testsuite/gm2/iso/pass/unbounded2.mod
+ fe2cff5a6de73f88d5d36f1989be93d3  gcc/testsuite/gm2/iso/run/pass/CHAR.mod
  d71a6ac0e0221fe50dc256107211dd31  gcc/testsuite/gm2/iso/run/pass/adraddress.mod
  68113bc0c0aa774be83e0af4a4e7ba12  gcc/testsuite/gm2/iso/run/pass/adrunbounded3.mod
  a0eb439d9f4cc681b21fe56bfdb9af1a  gcc/testsuite/gm2/iso/run/pass/array9.mod
*************** d8b017fce021a48a38acf23ef7022b6c  gcc/te
*** 108649,108654 ****
--- 108690,108696 ----
  d60b1560bcbcb75d7155b713a0615e2b  gcc/testsuite/gm2/iso/run/pass/fileio.def
  159695faf1dbe033f4bdae12a3c1cd48  gcc/testsuite/gm2/iso/run/pass/fileio.mod
  5b867827747aed9a1a9fb833804c50c3  gcc/testsuite/gm2/iso/run/pass/hello.mod
+ 934be849c50957ef2bbfb56adecc7ce8  gcc/testsuite/gm2/iso/run/pass/importself.mod
  6c43786a6103c10ca7df3fb5094e1ce7  gcc/testsuite/gm2/iso/run/pass/int8field.mod
  015a316a5f6deb37e5a3eae416c1830d  gcc/testsuite/gm2/iso/run/pass/iso-run-pass.exp
  fbaaeb1457a87cc689195a316d3d5867  gcc/testsuite/gm2/iso/run/pass/lazyunique.mod
*************** f9fbb418b92d420ebb3f6a854efc8622  gcc/te
*** 108741,108746 ****
--- 108783,108789 ----
  75ef6c39687877d18acecb1187d7077c  gcc/testsuite/gm2/isolib/run/pass/termfile.mod-disabled
  dc2a1d9cbb699aea2bb0228df7dc3bab  gcc/testsuite/gm2/isolib/run/pass/testappend.mod
  44b0706459af32f2fcae978eb612d24a  gcc/testsuite/gm2/isolib/run/pass/testdelete.mod
+ a678ad29e6501579ae0715c3d544730f  gcc/testsuite/gm2/isolib/run/pass/testdelete2.mod
  5be5d33eec745090ad97266f20fc2177  gcc/testsuite/gm2/isolib/run/pass/testinittm.mod
  3c2b8785cd9a160a4d9c0557e6712778  gcc/testsuite/gm2/isolib/run/pass/testinput
  c52fa331117eec4f92c2d39dc4aebd31  gcc/testsuite/gm2/isolib/run/pass/testio.mod
*************** db7436cc6948424e65700d7b6597862f  gcc/te
*** 108817,108822 ****
--- 108860,108866 ----
  2e24a3e28841ca8e384564b7acfa33e3  gcc/testsuite/gm2/pim/fail/badexpression2.mod
  89a7178511546bb8afdc764de0335c4a  gcc/testsuite/gm2/pim/fail/badfunc.mod
  3cd3393b9ababea5806a0cace8d0ebbc  gcc/testsuite/gm2/pim/fail/badifin.mod
+ 903da6080f9bf68896764b9f9949159d  gcc/testsuite/gm2/pim/fail/badmodvar.mod
  8805471600280b26d1436d6cfcff4ac9  gcc/testsuite/gm2/pim/fail/badparam.mod
  06e24a2d59b14219f627f48df32c5901  gcc/testsuite/gm2/pim/fail/badparam2.mod
  13f6eaffdf8fc096d373469d4a6bda4e  gcc/testsuite/gm2/pim/fail/badparamset1.mod
*************** c0a1e7a398973481be6f30c11eee5bae  gcc/te
*** 108853,108858 ****
--- 108897,108905 ----
  cc99f9e949c6dddafb584904b9be8f3c  gcc/testsuite/gm2/pim/fail/constsize3.mod
  8b50d0c15682d656c7047227936175ce  gcc/testsuite/gm2/pim/fail/constvar.mod
  54025100702ca0cb25f9ada45667ec17  gcc/testsuite/gm2/pim/fail/convert5.mod
+ 7ae3ce8e09aa59edde4769f7757ce872  gcc/testsuite/gm2/pim/fail/cyclictypes.mod
+ cf5964a594fddba35dbfb194aeb2e839  gcc/testsuite/gm2/pim/fail/cyclictypes2.mod
+ 34144859bc9578fe905aadbe5f53fbf2  gcc/testsuite/gm2/pim/fail/cyclictypes4.mod
  3f4c180de69d4c0b8298d9e6afdd1060  gcc/testsuite/gm2/pim/fail/dupconst.mod
  3c76b2c22335070f117f23a28bab42ec  gcc/testsuite/gm2/pim/fail/dupenum.mod
  4abe92933af7dafe1feaa8c7a215fb00  gcc/testsuite/gm2/pim/fail/dupfield.mod
*************** b5d72ddf37fa215a8a2ba4553362cbfd  gcc/te
*** 108900,108905 ****
--- 108947,108954 ----
  db64b3313172b59590b6f9b32f53a1ce  gcc/testsuite/gm2/pim/fail/shift2.mod
  571ec1fadb9b82dc9bc0fa9c60f3f97d  gcc/testsuite/gm2/pim/fail/strconst.def
  8aa2d8325556f352b6b882fd4cd11895  gcc/testsuite/gm2/pim/fail/subrange7.mod
+ b59f1e85df1cb23494635521d407b761  gcc/testsuite/gm2/pim/fail/testcharint.mod
+ 151cbaca9312ffa2f0ebf171aa2a28e9  gcc/testsuite/gm2/pim/fail/testindrx.mod
  5083c906d07f937882178cefe6402cb6  gcc/testsuite/gm2/pim/fail/tinyadr.mod
  8e5aab038017a365fd18f47d250ad74e  gcc/testsuite/gm2/pim/fail/tinyconst.mod
  fee9872b16570ba80886c91358d5072a  gcc/testsuite/gm2/pim/fail/tinyfor4.mod
*************** fbc17565218bf6416842770d3da67ef5  gcc/te
*** 108922,108927 ****
--- 108971,108978 ----
  7c7c809552d42a50bff70592ebf6b2b0  gcc/testsuite/gm2/pim/options/optimize/run/pass/pim-options-optimize-run-pass.exp
  cee505de5fa1b51118f12fcc7bbed319  gcc/testsuite/gm2/pim/options/optimize/run/pass/testadd.mod
  9b4ff834f4fda732f403341ef20fcb41  gcc/testsuite/gm2/pim/pass/ABSBug.mod
+ ac435dc05f7be0c0c817cd3bc9cfb976  gcc/testsuite/gm2/pim/pass/ReturnType.mod
+ fca677e44c8952272f41abcceed55ab5  gcc/testsuite/gm2/pim/pass/ReturnType2.mod
  e026269fe28e5f09779af73f2cea83b1  gcc/testsuite/gm2/pim/pass/TestLong4.mod
  30a108d56cb05733a64006648ee09503  gcc/testsuite/gm2/pim/pass/TestLong7.mod
  3ca903eb9c23ee2cc7ac89972a5900f1  gcc/testsuite/gm2/pim/pass/TestLong8.mod
*************** aabcce2ae6fcf461e4dc47ece6490255  gcc/te
*** 109028,109033 ****
--- 109079,109085 ----
  d1d27d2d63c6c5064aba34a58efe74b3  gcc/testsuite/gm2/pim/pass/foo2.mod
  519ac1b6b2f9994fc011779a417ac94a  gcc/testsuite/gm2/pim/pass/fooasm3.mod
  56286f2c3e92e15a7825618ae140091a  gcc/testsuite/gm2/pim/pass/for1.mod
+ 1bea85b657c87dc2f26e7e4f6f1de34f  gcc/testsuite/gm2/pim/pass/forarray.mod
  c5ba6a075ea2d754fd6c5cf5d0f63063  gcc/testsuite/gm2/pim/pass/forloop2.mod
  10d682bfd9139721b0c4ea187465de5b  gcc/testsuite/gm2/pim/pass/forloopby2.mod
  310d5b0ee05fb7018a2d7e1fac03e86b  gcc/testsuite/gm2/pim/pass/forloopnulchar.mod
*************** cce3b11c80bfaa050f9fcd714bbfec6b  gcc/te
*** 109319,109324 ****
--- 109371,109379 ----
  f9c16774d6b8b09168e5501d129d2b39  gcc/testsuite/gm2/pim/pass/teststdio.mod
  f4f9aa0135b313903e7725725c4385e1  gcc/testsuite/gm2/pim/pass/testvar.mod
  2766ea673865a5df26f15613124635c6  gcc/testsuite/gm2/pim/pass/testvarin.mod
+ df692dcf70e6973b335e42351b4a4f9b  gcc/testsuite/gm2/pim/pass/testxindr.mod
+ dd12697584e19ba55d3242f9922c3789  gcc/testsuite/gm2/pim/pass/testxindr2.mod
+ e0d7532d7c4f6c81574527e57d21470a  gcc/testsuite/gm2/pim/pass/testxindr3.mod
  a3c1301ea024074c9366c4c040c30c58  gcc/testsuite/gm2/pim/pass/timeio.mod
  f9a69e63d5cd69eba1535f2774b2439b  gcc/testsuite/gm2/pim/pass/timeio2.mod
  15a371045a8d153776c3929053091f38  gcc/testsuite/gm2/pim/pass/timeio3.mod
*************** bc32d4230d22e40bfcb1e74bb392ab97  gcc/te
*** 109603,109608 ****
--- 109658,109665 ----
  48bea14426a2eb3497c75d91b28ead48  gcc/testsuite/gm2/pimlib/logitech/run/pass/realinput2.mod
  86bd87e23026ed6bf9dab38da47fd638  gcc/testsuite/gm2/pimlib/logitech/run/pass/realinput3.mod
  6de5e9c5a7b2bb68088a9983d496b0ef  gcc/testsuite/gm2/pimlib/logitech/run/pass/rename.mod
+ d3c9e9c643b707e6298f82ba170ee883  gcc/testsuite/gm2/pimlib/logitech/run/pass/testdelete2.mod
+ 90894de07b46fc09b2259d3be72ef874  gcc/testsuite/gm2/pimlib/logitech/run/pass/teststrings.mod
  00248d5f46033daa8b9856ff2869e3e5  gcc/testsuite/gm2/pimlib/logitech/run/pass/timedate.mod
  cb7f18d9d8e9955ad964a25e931aacba  gcc/testsuite/gm2/pimlib/logitech/run/pass/writeoct.mod
  0e008071b07f2e6b9b9336fa1f4f28ba  gcc/testsuite/gm2/pimlib/pass/pimlib-pass.exp
*************** b434571f14dc637407f321e185093bce  gcc/te
*** 109614,109625 ****
--- 109671,109685 ----
  12b74f13ad655f02d6d03cd3afd8386b  gcc/testsuite/gm2/pimlib/run/pass/pimlib-run-pass.exp
  19fbabb90573435e066566857d602ff9  gcc/testsuite/gm2/pimlib/run/pass/test.c
  eb658a5ad91f33a16115753df34c87d4  gcc/testsuite/gm2/pimlib/run/pass/testchar.mod
+ e1370374caa4a3a31fefd6609cc7df7f  gcc/testsuite/gm2/pimlib/run/pass/testdelete.mod
  248b32cb4654932e670ca1f4528b0e6d  gcc/testsuite/gm2/pimlib/run/pass/testfiobinary.mod
  e5d5befc7aececd211929f46bd11fdda  gcc/testsuite/gm2/pimlib/run/pass/testgetopt.mod
  9a882e693618bae68e045331cbbf0a39  gcc/testsuite/gm2/pimlib/run/pass/testnan.mod
  03835ac6724df96b735b599622c5ed72  gcc/testsuite/gm2/pimlib/run/pass/testreal.mod
  6cd4e8bb0e0f2f90962a1667f6d2c50f  gcc/testsuite/gm2/pimlib/run/pass/testreal2.mod
  15b6dac89ee25f9c41909c8cab7033a9  gcc/testsuite/gm2/pimlib/run/pass/testreal4.mod
+ 94dfcc8f117db06f4006eb96be4e84f8  gcc/testsuite/gm2/pimlib/run/pass/testwrite.mod
+ 1aa30b418b9ca42daba58742ea25f51f  gcc/testsuite/gm2/pimlib/run/pass/testwritechar.mod
  d42665273dfdf6111268f44c425bef5a  gcc/testsuite/gm2/projects/README
  9a671ebc8f4bdad366a08a252439855c  gcc/testsuite/gm2/projects/iso/run/pass/halma/halma.mod
  08d5a7f3db0f9db283fd7cfc21db5f17  gcc/testsuite/gm2/projects/iso/run/pass/halma/projects-iso-run-pass-halma.exp
*************** d6745dcdcf31b04bf69ee5368bf82671  gcc/te
*** 110465,110470 ****
--- 110525,110532 ----
  f687233fcc6d98dbcb96055885a9ee66  gcc/testsuite/gnat.dg/deref1.ads
  f8a4e9fa10d4ee5c8acc1db41a267fe2  gcc/testsuite/gnat.dg/deref2.ads
  f012ebb01ff886347e17f97249598c1c  gcc/testsuite/gnat.dg/deref3.adb
+ e1912a776fb84928609bc2929269d626  gcc/testsuite/gnat.dg/deref4.adb
+ 42e7486d198a133920287766e84ab357  gcc/testsuite/gnat.dg/deref4_pkg.ads
  65ed60d5522e5e74644cec85412ae2c8  gcc/testsuite/gnat.dg/derived_aggregate.adb
  23705667d8765117a7f5ea75d97eefe5  gcc/testsuite/gnat.dg/derived_type1.adb
  d644b0f10aac249229a606bea7e1a485  gcc/testsuite/gnat.dg/derived_type2.adb
*************** da671ca390cc71e31d1a13e83175ed07  gcc/te
*** 116538,116544 ****
  cd02e5ae651b681a19fcaf8376afcbf5  gcc/testsuite/rust/compile/not_a_float_literal_tuple_index.rs
  295d3f361dc7ebc9f93d3f2553623849  gcc/testsuite/rust/compile/not_find_value_in_scope.rs
  44807d1ba47e379ce9115ce45743697e  gcc/testsuite/rust/compile/not_raw_ref_op.rs
! f32b9456d62604cbc47c1dceac8dbea4  gcc/testsuite/rust/compile/nr2/compile.exp
  45356d5f40cc0bf1201d9172ef149f26  gcc/testsuite/rust/compile/nr2/exclude
  6030c60f7b74c803068d451cb9ced7e5  gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg.rs
  090d2f2bf747a624502f3ee033467544  gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg2.rs
--- 116600,116606 ----
  cd02e5ae651b681a19fcaf8376afcbf5  gcc/testsuite/rust/compile/not_a_float_literal_tuple_index.rs
  295d3f361dc7ebc9f93d3f2553623849  gcc/testsuite/rust/compile/not_find_value_in_scope.rs
  44807d1ba47e379ce9115ce45743697e  gcc/testsuite/rust/compile/not_raw_ref_op.rs
! e1276ff6c1d3f1fc6fdfb0a1e3812efd  gcc/testsuite/rust/compile/nr2/compile.exp
  45356d5f40cc0bf1201d9172ef149f26  gcc/testsuite/rust/compile/nr2/exclude
  6030c60f7b74c803068d451cb9ced7e5  gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg.rs
  090d2f2bf747a624502f3ee033467544  gcc/testsuite/rust/compile/parse_associated_type_as_generic_arg2.rs
*************** c0b0549adb2c1140cf285901abb5a78c  gcc/tr
*** 117368,117374 ****
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
  08cb1e9bb65caad7ed062b606b4c9334  gcc/tree-ssa-phiopt.cc
  0864f59d85045caee0a643f82fa6d20c  gcc/tree-ssa-phiprop.cc
! 45a34ce7f2c6b00085d143bf72328d74  gcc/tree-ssa-pre.cc
  207e8eba5552b33b5aae2de6e7c1f35d  gcc/tree-ssa-propagate.cc
  299c5d8dabcb4a4d30bab51fbedc4e68  gcc/tree-ssa-propagate.h
  233d764ee886ccb3223d08a55f2a1ddc  gcc/tree-ssa-reassoc.cc
--- 117430,117436 ----
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
  08cb1e9bb65caad7ed062b606b4c9334  gcc/tree-ssa-phiopt.cc
  0864f59d85045caee0a643f82fa6d20c  gcc/tree-ssa-phiprop.cc
! 0c173f8637d1259922572eb432a405ef  gcc/tree-ssa-pre.cc
  207e8eba5552b33b5aae2de6e7c1f35d  gcc/tree-ssa-propagate.cc
  299c5d8dabcb4a4d30bab51fbedc4e68  gcc/tree-ssa-propagate.h
  233d764ee886ccb3223d08a55f2a1ddc  gcc/tree-ssa-reassoc.cc
*************** cc0bdf3f684b251509b8552d2d8549a3  gcc/tr
*** 117411,117417 ****
  77240c08cea454c2d4a449206f7930c3  gcc/tree-vect-patterns.cc
  baa70369c21f662d5e61d1296052d231  gcc/tree-vect-slp-patterns.cc
  09d798b4fe50daf2514eca382d37c9ae  gcc/tree-vect-slp.cc
! 738369f526fbf5f44cc122e26e6a5897  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  6a5457c324d4279acbd82f147f1dd823  gcc/tree-vectorizer.cc
--- 117473,117479 ----
  77240c08cea454c2d4a449206f7930c3  gcc/tree-vect-patterns.cc
  baa70369c21f662d5e61d1296052d231  gcc/tree-vect-slp-patterns.cc
  09d798b4fe50daf2514eca382d37c9ae  gcc/tree-vect-slp.cc
! 9810ddfe1a934f6f705279bd433cd763  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  6a5457c324d4279acbd82f147f1dd823  gcc/tree-vectorizer.cc
*************** f63a06d746592d67d8c161bc2461a24e  libgfo
*** 120885,120891 ****
  e90afde1ec8653f66d433a7cc5e070a7  libgfortran/runtime/select_inc.c
  fa1f81a5ee204308c775545490d24fbd  libgfortran/runtime/stop.c
  08f6570c94f64b0aaf21fb2ec9aa10e9  libgfortran/runtime/string.c
! e71b974fe8b71b9fa69f3c036e8cf021  libgm2/ChangeLog
  81dadb03add7a7278a98cd845177e76a  libgm2/Makefile.am
  38778826306c4efe1f6a33cb21cece23  libgm2/Makefile.in
  5655398e9c1e3027c587898dc4fce566  libgm2/acinclude.m4
--- 120947,120953 ----
  e90afde1ec8653f66d433a7cc5e070a7  libgfortran/runtime/select_inc.c
  fa1f81a5ee204308c775545490d24fbd  libgfortran/runtime/stop.c
  08f6570c94f64b0aaf21fb2ec9aa10e9  libgfortran/runtime/string.c
! b9f83f87178a4d8c446a2c8a3430a5e8  libgm2/ChangeLog
  81dadb03add7a7278a98cd845177e76a  libgm2/Makefile.am
  38778826306c4efe1f6a33cb21cece23  libgm2/Makefile.in
  5655398e9c1e3027c587898dc4fce566  libgm2/acinclude.m4
*************** f25de03fc822c5eebf7118fcf5283ebc  libgm2
*** 120899,120906 ****
  1c81daa01520f3a05da1ff4d530f5873  libgm2/libm2cor/Makefile.in
  256f893d9141ee50fb703d08f0c7ce3a  libgm2/libm2iso/ChanConsts.h
  87d5ba33acc7d56c7dd0f43a7d6660ca  libgm2/libm2iso/ErrnoCategory.cc
! 26941eba9215610a8751469175c3d8f1  libgm2/libm2iso/Makefile.am
! 9226c2947deac943dd64c5faa28b5611  libgm2/libm2iso/Makefile.in
  55e7456cbf4c00590b7d5c26437bf683  libgm2/libm2iso/RTco.cc
  60e20d4966763ff532153264c355ec8f  libgm2/libm2iso/m2rts.h
  9cb2d2fda0da4de1596491a1ba383634  libgm2/libm2iso/wrapclock.cc
--- 120961,120968 ----
  1c81daa01520f3a05da1ff4d530f5873  libgm2/libm2cor/Makefile.in
  256f893d9141ee50fb703d08f0c7ce3a  libgm2/libm2iso/ChanConsts.h
  87d5ba33acc7d56c7dd0f43a7d6660ca  libgm2/libm2iso/ErrnoCategory.cc
! 50b1ab5ac2f7313addeb89244a63e53d  libgm2/libm2iso/Makefile.am
! 06bbf355611e65199fed815c1971975a  libgm2/libm2iso/Makefile.in
  55e7456cbf4c00590b7d5c26437bf683  libgm2/libm2iso/RTco.cc
  60e20d4966763ff532153264c355ec8f  libgm2/libm2iso/m2rts.h
  9cb2d2fda0da4de1596491a1ba383634  libgm2/libm2iso/wrapclock.cc
*************** c0826ae4087216cbe3d07b7ac749be7c  libgm2
*** 120912,120919 ****
  36f227f41f6cb4fc9bd5eaa5345378f3  libgm2/libm2min/Makefile.am
  0508f72ba2d22517546c50f880f3cf9e  libgm2/libm2min/Makefile.in
  a9f05e5da997bab66d457b3be2773189  libgm2/libm2min/libc.c
! 26e1cfb99ad6f72aa6ecedf590bada9b  libgm2/libm2pim/Makefile.am
! bf74dde0f66b5139acccabfa3477ac3c  libgm2/libm2pim/Makefile.in
  944531ee3e0d441b1c7209ac2c2355eb  libgm2/libm2pim/Selective.cc
  635915386732139700506c42de8b469d  libgm2/libm2pim/SysExceptions.cc
  04512543e0711f8f6f6e1fb2a995330e  libgm2/libm2pim/UnixArgs.cc
--- 120974,120982 ----
  36f227f41f6cb4fc9bd5eaa5345378f3  libgm2/libm2min/Makefile.am
  0508f72ba2d22517546c50f880f3cf9e  libgm2/libm2min/Makefile.in
  a9f05e5da997bab66d457b3be2773189  libgm2/libm2min/libc.c
! 672db9b5f503b1b02773144313a13746  libgm2/libm2pim/CFileSysOp.cc
! e9a9fa4aa273c6c9fb72e428bbac71b3  libgm2/libm2pim/Makefile.am
! ec626ef6d1f1791a48dde69a7877a01a  libgm2/libm2pim/Makefile.in
  944531ee3e0d441b1c7209ac2c2355eb  libgm2/libm2pim/Selective.cc
  635915386732139700506c42de8b469d  libgm2/libm2pim/SysExceptions.cc
  04512543e0711f8f6f6e1fb2a995330e  libgm2/libm2pim/UnixArgs.cc
*************** abc6f4755fae8c6e8f45ce5fee798654  libstd
*** 131444,131450 ****
  315db7caf5823f4451b226448fb27662  libstdc++-v3/config/abi/post/sparc64-linux-gnu/baseline_symbols.txt
  0feacae434c67857f81d494f83cf3851  libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt
  103fca270597909e88cb192ff00ca556  libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt
! 47c8d77956f3c48e132885f7b30c2cdf  libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
  5c4c38aeca254313c616b84337c937c3  libstdc++-v3/config/abi/pre/float128.ver
  07b85b9691cd7b04b3427e50e222f983  libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
  5115259bafa81c9269c0d5e13b641cc0  libstdc++-v3/config/abi/pre/gnu.ver
--- 131507,131513 ----
  315db7caf5823f4451b226448fb27662  libstdc++-v3/config/abi/post/sparc64-linux-gnu/baseline_symbols.txt
  0feacae434c67857f81d494f83cf3851  libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt
  103fca270597909e88cb192ff00ca556  libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt
! 6c165e7a2d80e986556ae6dc2bad3857  libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
  5c4c38aeca254313c616b84337c937c3  libstdc++-v3/config/abi/pre/float128.ver
  07b85b9691cd7b04b3427e50e222f983  libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
  5115259bafa81c9269c0d5e13b641cc0  libstdc++-v3/config/abi/pre/gnu.ver
diff -Nrcpad gcc-15-20250712/gcc/ChangeLog gcc-15-20250719/gcc/ChangeLog
*** gcc-15-20250712/gcc/ChangeLog	Sat Jul 12 22:32:29 2025
--- gcc-15-20250719/gcc/ChangeLog	Sat Jul 19 22:32:13 2025
***************
*** 1,3 ****
--- 1,239 ----
+ 2025-07-18  Hans-Peter Nilsson  <hp@bitrange.com>
+ 	    Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR middle-end/120935
+ 	* config/mmix/mmix.h (MAX_FIXED_MODE_SIZE): Define.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120924
+ 	* params.opt (uninit-max-chain-len): Up from 8 to 12.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-15  Richard Biener  <rguenther@suse.de>
+ 		    Richard Sandiford   <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/121059
+ 	* tree-vect-stmts.cc (vectorizable_operation): Query
+ 	scalar_cond_masked_set with the correct number of masks.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121049
+ 	* internal-fn.h (widening_evenodd_fn_p): Declare.
+ 	* internal-fn.cc (widening_evenodd_fn_p): New function.
+ 	* tree-vect-stmts.cc (vectorizable_conversion): When using
+ 	an even/odd widening function disable loop masking.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121035
+ 	* tree-ssa-pre.cc (find_or_generate_expression): Handle
+ 	values without expression.
+ 
+ 2025-07-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121131
+ 	* gimple-fold.cc (fold_nonarray_ctor_reference): Use
+ 	TREE_INT_CST_LOW (TYPE_SIZE ()) instead of
+ 	GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE ()) for BLKmode BITINT_TYPEs.
+ 	Don't compute encoding_size at all for little endian targets.
+ 
+ 2025-07-17  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2025-07-04  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/120807
+ 	* config/loongarch/loongarch.md (crc_combine): Avoid nested
+ 	subreg.
+ 
+ 2025-07-16  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* common/config/i386/i386-common.cc
+ 	(OPTION_MASK_ISA2_AMX_AVX512_SET): Do not set AVX10.2.
+ 	(OPTION_MASK_ISA2_AVX10_2_UNSET): Remove AMX-AVX512 unset.
+ 	(OPTION_MASK_ISA2_AVX512F_UNSET): Unset AMX-AVX512.
+ 	(ix86_handle_option): Imply AVX512F for AMX-AVX512.
+ 
+ 2025-07-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2025-07-07  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/120709
+ 	* builtins.cc (expand_builtin_crc_table_based): Error out
+ 	instead of asserting the 3rd argument is an integer constant.
+ 	* internal-fn.cc (expand_crc_optab_fn): Likewise.
+ 	* doc/extend.texi (crc): Document requirement of the poly argument
+ 	being a constant.
+ 
+ 2025-07-14  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Backported from master:
+ 	2025-07-10  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/120999
+ 	* config/aarch64/aarch64-sve2.md (*aarch64_sve2_nor<mode>):
+ 	Adjust movprfx alternative.
+ 
+ 2025-07-14  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2025-05-08  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md (@aarch64_pred_<optab><mode>): Move
+ 	commutative marker to the cons specification.
+ 	(add<mode>3): Likewise.
+ 	(@aarch64_pred_<su>abd<mode>): Likewise.
+ 	(@aarch64_pred_<optab><mode>): Likewise.
+ 	(*cond_<optab><mode>_z): Likewise.
+ 	(<optab><mode>3): Likewise.
+ 	(@aarch64_pred_<optab><mode>): Likewise.
+ 	(*aarch64_pred_abd<mode>_relaxed): Likewise.
+ 	(*aarch64_pred_abd<mode>_strict): Likewise.
+ 	(@aarch64_pred_<optab><mode>): Likewise.
+ 	(@aarch64_pred_<optab><mode>): Likewise.
+ 	(@aarch64_pred_fma<mode>): Likewise.
+ 	(@aarch64_pred_fnma<mode>): Likewise.
+ 	(@aarch64_pred_<optab><mode>): Likewise.
+ 	* config/aarch64/aarch64-sve2.md (@aarch64_sve_<su>clamp<mode>): Move
+ 	commutative marker to the cons specification.
+ 	(*aarch64_sve_<su>clamp<mode>_x): Likewise.
+ 	(@aarch64_sve_fclamp<mode>): Likewise.
+ 	(*aarch64_sve_fclamp<mode>_x): Likewise.
+ 	(*aarch64_sve2_nor<mode>): Likewise.
+ 	(*aarch64_sve2_nand<mode>): Likewise.
+ 	(*aarch64_pred_faminmax_fused): Likewise.
+ 	* config/aarch64/aarch64.md (*loadwb_pre_pair_<ldst_sz>): Move the
+ 	early-clobber marker to the relevant alternative.
+ 	(*storewb_pre_pair_<ldst_sz>): Likewise.
+ 	(*add<mode>3_aarch64): Move commutative marker to the cons
+ 	specification.
+ 	(*addsi3_aarch64_uxtw): Likewise.
+ 	(*add<mode>3_poly_1): Likewise.
+ 	(add<mode>3_compare0): Likewise.
+ 	(*addsi3_compare0_uxtw): Likewise.
+ 	(*add<mode>3nr_compare0): Likewise.
+ 	(<optab><mode>3): Likewise.
+ 	(*<optab>si3_uxtw): Likewise.
+ 	(*and<mode>3_compare0): Likewise.
+ 	(*andsi3_compare0_uxtw): Likewise.
+ 	(@aarch64_and<mode>3nr_compare0): Likewise.
+ 
+ 2025-07-14  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	Backported from master:
+ 	2025-06-30  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR rtl-optimization/120242
+ 	PR rtl-optimization/120627
+ 	PR rtl-optimization/120736
+ 	PR rtl-optimization/120813
+ 	* ext-dce.cc (ext_dce_process_uses): Remove some cases where we
+ 	unnecessarily expanded live sets for promoted subregs.
+ 	(expand_changed_pseudos): New function.
+ 	(reset_subreg_promoted_p): Use it.
+ 
+ 2025-07-14  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	Backported from master:
+ 	2025-07-04  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	PR target/118241
+ 	* config/riscv/riscv.md (prefetch): Add alternative "r".
+ 
+ 2025-07-14  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	Backported from master:
+ 	2025-07-04  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	* config/riscv/predicates.md (prefetch_operand): mack 5 bits.
+ 
+ 2025-07-14  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	Backported from master:
+ 	2025-06-24  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/118241
+ 	* config/riscv/predicates.md: Fix comment typo in recent change.
+ 
+ 2025-07-14  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	Backported from master:
+ 	2025-06-21  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/118241
+ 	* config/riscv/predicates.md (prefetch_operand): New predicate.
+ 	* config/riscv/constraints.md (Q): New constraint.
+ 	* config/riscv/riscv.md (prefetch): Use new predicate and constraint.
+ 	(riscv_prefetchi_<mode>): Similarly.
+ 
+ 2025-07-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120908
+ 	* config/i386/i386.cc (legitimize_tls_address): Pass RDI to
+ 	gen_tls_local_dynamic_64.
+ 	* config/i386/i386.md (*tls_global_dynamic_64_largepic): Add
+ 	RDI clobber and use it to generate LEA.
+ 	(*tls_local_dynamic_64_<mode>): Likewise.
+ 	(*tls_local_dynamic_base_64_largepic): Likewise.
+ 	(@tls_local_dynamic_64_<mode>): Add a clobber.
+ 
+ 2025-07-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-02  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120908
+ 	* config/i386/i386.cc (legitimize_tls_address): Pass RDI to
+ 	gen_tls_global_dynamic_64.
+ 	* config/i386/i386.md (*tls_global_dynamic_64_<mode>): Add RDI
+ 	clobber and use it to generate LEA.
+ 	(@tls_global_dynamic_64_<mode>): Add a clobber.
+ 
+ 2025-07-14  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* config/i386/i386.h (PTA_PANTHERLAKE): Revmoe KL and WIDEKL.
+ 	(PTA_CLEARWATERFOREST): Ditto.
+ 	* doc/invoke.texi: Revise documentation.
+ 
+ 2025-07-13  Alexey Merzlyakov  <alexey.merzlyakov@samsung.com>
+ 
+ 	Backported from master:
+ 	2025-07-02  Alexey Merzlyakov  <alexey.merzlyakov@samsung.com>
+ 
+ 	PR target/120356
+ 	* config/riscv/riscv-v.cc
+ 	(expand_const_vector_interleaved_stepped_npatterns):
+ 	Fix ASHIFT to LSHIFTRT insn.
+ 
+ 2025-07-13  Andreas Schwab  <schwab@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-08  Andreas Schwab  <schwab@suse.de>
+ 
+ 	PR target/120995
+ 	* config/riscv/sync.md (zacas_atomic_cas_value_strong<mode>):
+ 	Allow op3 to be zero.
+ 
  2025-07-11  Jakub Jelinek  <jakub@redhat.com>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250712/gcc/DATESTAMP gcc-15-20250719/gcc/DATESTAMP
*** gcc-15-20250712/gcc/DATESTAMP	Sat Jul 12 22:32:30 2025
--- gcc-15-20250719/gcc/DATESTAMP	Sat Jul 19 22:32:13 2025
***************
*** 1 ****
! 20250712
--- 1 ----
! 20250719
diff -Nrcpad gcc-15-20250712/gcc/ada/ChangeLog gcc-15-20250719/gcc/ada/ChangeLog
*** gcc-15-20250712/gcc/ada/ChangeLog	Sat Jul 12 22:32:30 2025
--- gcc-15-20250719/gcc/ada/ChangeLog	Sat Jul 19 22:32:13 2025
***************
*** 1,3 ****
--- 1,9 ----
+ 2025-07-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/121056
+ 	* sem_ch4.adb (Try_Object_Operation.Try_Primitive_Operation): Add
+ 	test on Is_Record_Type before accessing Underlying_Record_View.
+ 
  2025-07-04  Eric Botcazou  <ebotcazou@adacore.com>
  
  	* gcc-interface/utils.cc (make_packable_type): Clear the TYPE_PACKED
diff -Nrcpad gcc-15-20250712/gcc/ada/sem_ch4.adb gcc-15-20250719/gcc/ada/sem_ch4.adb
*** gcc-15-20250712/gcc/ada/sem_ch4.adb	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/ada/sem_ch4.adb	Sat Jul 19 22:32:14 2025
*************** package body Sem_Ch4 is
*** 10692,10697 ****
--- 10692,10698 ----
  
                or else
                  (Has_Unknown_Discriminants (Typ)
+                   and then Is_Record_Type (Base_Type (Obj_Type))
                    and then Typ = Underlying_Record_View (Base_Type (Obj_Type)))
  
                 --  Prefix can be dereferenced
diff -Nrcpad gcc-15-20250712/gcc/builtins.cc gcc-15-20250719/gcc/builtins.cc
*** gcc-15-20250712/gcc/builtins.cc	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/builtins.cc	Sat Jul 19 22:32:14 2025
*************** expand_builtin_crc_table_based (internal
*** 7800,7810 ****
  
    rtx op1 = expand_normal (rhs1);
    rtx op2 = expand_normal (rhs2);
!   gcc_assert (TREE_CODE (rhs3) == INTEGER_CST);
!   rtx op3 = gen_int_mode (TREE_INT_CST_LOW (rhs3), crc_mode);
  
    if (CONST_INT_P (op2))
!     op2 = gen_int_mode (INTVAL (op2), crc_mode);
  
    if (fn == IFN_CRC)
      expand_crc_table_based (target, op1, op2, op3, data_mode);
--- 7800,7816 ----
  
    rtx op1 = expand_normal (rhs1);
    rtx op2 = expand_normal (rhs2);
!   rtx op3;
!   if (TREE_CODE (rhs3) != INTEGER_CST)
!     {
!       error ("third argument to %<crc%> builtins must be a constant");
!       op3 = const0_rtx;
!     }
!   else
!     op3 = convert_to_mode (crc_mode, expand_normal (rhs3), 0);
  
    if (CONST_INT_P (op2))
!     op2 = convert_to_mode (crc_mode, op2, 0);
  
    if (fn == IFN_CRC)
      expand_crc_table_based (target, op1, op2, op3, data_mode);
diff -Nrcpad gcc-15-20250712/gcc/common/config/i386/i386-common.cc gcc-15-20250719/gcc/common/config/i386/i386-common.cc
*** gcc-15-20250712/gcc/common/config/i386/i386-common.cc	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/common/config/i386/i386-common.cc	Sat Jul 19 22:32:14 2025
*************** along with GCC; see the file COPYING3.
*** 125,132 ****
  #define OPTION_MASK_ISA2_AVX10_2_SET \
    (OPTION_MASK_ISA2_AVX10_1_SET | OPTION_MASK_ISA2_AVX10_2)
  #define OPTION_MASK_ISA2_AMX_AVX512_SET \
!   (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AVX10_2_SET \
!    | OPTION_MASK_ISA2_AMX_AVX512)
  #define OPTION_MASK_ISA2_AMX_TF32_SET \
    (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_TF32)
  #define OPTION_MASK_ISA2_AMX_TRANSPOSE_SET \
--- 125,131 ----
  #define OPTION_MASK_ISA2_AVX10_2_SET \
    (OPTION_MASK_ISA2_AVX10_1_SET | OPTION_MASK_ISA2_AVX10_2)
  #define OPTION_MASK_ISA2_AMX_AVX512_SET \
!   (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_AVX512)
  #define OPTION_MASK_ISA2_AMX_TF32_SET \
    (OPTION_MASK_ISA2_AMX_TILE_SET | OPTION_MASK_ISA2_AMX_TF32)
  #define OPTION_MASK_ISA2_AMX_TRANSPOSE_SET \
*************** along with GCC; see the file COPYING3.
*** 325,332 ****
  #define OPTION_MASK_ISA2_AVX10_1_UNSET \
    (OPTION_MASK_ISA2_AVX10_1_256 | OPTION_MASK_ISA2_AVX10_1 \
     | OPTION_MASK_ISA2_AVX10_2_UNSET)
! #define OPTION_MASK_ISA2_AVX10_2_UNSET \
!   (OPTION_MASK_ISA2_AVX10_2 | OPTION_MASK_ISA2_AMX_AVX512_UNSET)
  #define OPTION_MASK_ISA2_AMX_AVX512_UNSET OPTION_MASK_ISA2_AMX_AVX512
  #define OPTION_MASK_ISA2_AMX_TF32_UNSET OPTION_MASK_ISA2_AMX_TF32
  #define OPTION_MASK_ISA2_AMX_TRANSPOSE_UNSET OPTION_MASK_ISA2_AMX_TRANSPOSE
--- 324,330 ----
  #define OPTION_MASK_ISA2_AVX10_1_UNSET \
    (OPTION_MASK_ISA2_AVX10_1_256 | OPTION_MASK_ISA2_AVX10_1 \
     | OPTION_MASK_ISA2_AVX10_2_UNSET)
! #define OPTION_MASK_ISA2_AVX10_2_UNSET OPTION_MASK_ISA2_AVX10_2
  #define OPTION_MASK_ISA2_AMX_AVX512_UNSET OPTION_MASK_ISA2_AMX_AVX512
  #define OPTION_MASK_ISA2_AMX_TF32_UNSET OPTION_MASK_ISA2_AMX_TF32
  #define OPTION_MASK_ISA2_AMX_TRANSPOSE_UNSET OPTION_MASK_ISA2_AMX_TRANSPOSE
*************** along with GCC; see the file COPYING3.
*** 375,381 ****
  
  #define OPTION_MASK_ISA2_AVX512F_UNSET \
    (OPTION_MASK_ISA2_AVX512BW_UNSET \
!    | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET)
  #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \
    OPTION_MASK_ISA2_SSE_UNSET
  #define OPTION_MASK_ISA2_AVX_UNSET \
--- 373,380 ----
  
  #define OPTION_MASK_ISA2_AVX512F_UNSET \
    (OPTION_MASK_ISA2_AVX512BW_UNSET \
!    | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET \
!    | OPTION_MASK_ISA2_AMX_AVX512_UNSET)
  #define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \
    OPTION_MASK_ISA2_SSE_UNSET
  #define OPTION_MASK_ISA2_AVX_UNSET \
*************** ix86_handle_option (struct gcc_options *
*** 1414,1421 ****
  	{
  	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_AVX512_SET;
  	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_AVX512_SET;
! 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX2_SET;
! 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX2_SET;
  	}
        else
  	{
--- 1413,1420 ----
  	{
  	  opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_AVX512_SET;
  	  opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_AVX512_SET;
! 	  opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX512F_SET;
! 	  opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX512F_SET;
  	}
        else
  	{
diff -Nrcpad gcc-15-20250712/gcc/config/aarch64/aarch64-sve.md gcc-15-20250719/gcc/config/aarch64/aarch64-sve.md
*** gcc-15-20250712/gcc/config/aarch64/aarch64-sve.md	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/aarch64/aarch64-sve.md	Sat Jul 19 22:32:14 2025
***************
*** 3949,3956 ****
  	     (match_operand:SVE_I_SIMD_DI 3 "aarch64_sve_<sve_imm_con>_operand"))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3             ; attrs: movprfx ]
!      [ w        , Upl , %0 , <sve_imm_con> ; *              ] #
       [ w        , Upl , 0  , w             ; *              ] <sve_int_op>\t%Z0.<Vetype>, %1/m, %Z0.<Vetype>, %Z3.<Vetype>
       [ ?&w      , Upl , w  , <sve_imm_con> ; yes            ] #
       [ ?&w      , Upl , w  , w             ; yes            ] movprfx\t%Z0, %Z2\;<sve_int_op>\t%Z0.<Vetype>, %1/m, %Z0.<Vetype>, %Z3.<Vetype>
--- 3949,3956 ----
  	     (match_operand:SVE_I_SIMD_DI 3 "aarch64_sve_<sve_imm_con>_operand"))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3             ; attrs: movprfx ]
!      [ w        , Upl , 0  , <sve_imm_con> ; *              ] #
       [ w        , Upl , 0  , w             ; *              ] <sve_int_op>\t%Z0.<Vetype>, %1/m, %Z0.<Vetype>, %Z3.<Vetype>
       [ ?&w      , Upl , w  , <sve_imm_con> ; yes            ] #
       [ ?&w      , Upl , w  , w             ; yes            ] movprfx\t%Z0, %Z2\;<sve_int_op>\t%Z0.<Vetype>, %1/m, %Z0.<Vetype>, %Z3.<Vetype>
***************
*** 4079,4086 ****
  	  (match_operand:SVE_I 1 "register_operand")
  	  (match_operand:SVE_I 2 "aarch64_sve_add_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1  , 2   ; attrs: movprfx ]
!      [ w        , %0 , vsa ; *              ] add\t%0.<Vetype>, %0.<Vetype>, #%D2
       [ w        , 0  , vsn ; *              ] sub\t%0.<Vetype>, %0.<Vetype>, #%N2
       [ w        , 0  , vsi ; *              ] << aarch64_output_sve_vector_inc_dec ("%0.<Vetype>", operands[2]);
       [ ?w       , w  , vsa ; yes            ] movprfx\t%0, %1\;add\t%0.<Vetype>, %0.<Vetype>, #%D2
--- 4079,4086 ----
  	  (match_operand:SVE_I 1 "register_operand")
  	  (match_operand:SVE_I 2 "aarch64_sve_add_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , %1 , 2   ; attrs: movprfx ]
!      [ w        , 0  , vsa ; *              ] add\t%0.<Vetype>, %0.<Vetype>, #%D2
       [ w        , 0  , vsn ; *              ] sub\t%0.<Vetype>, %0.<Vetype>, #%N2
       [ w        , 0  , vsi ; *              ] << aarch64_output_sve_vector_inc_dec ("%0.<Vetype>", operands[2]);
       [ ?w       , w  , vsa ; yes            ] movprfx\t%0, %1\;add\t%0.<Vetype>, %0.<Vetype>, #%D2
***************
*** 4298,4305 ****
  	       (match_dup 3))]
  	    UNSPEC_PRED_X)))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w ; *              ] <su>abd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<su>abd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
--- 4298,4305 ----
  	       (match_dup 3))]
  	    UNSPEC_PRED_X)))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w ; *              ] <su>abd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<su>abd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
***************
*** 4513,4520 ****
  	     MUL_HIGHPART)]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w ; *              ] <su>mulh\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<su>mulh\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
--- 4513,4520 ----
  	     MUL_HIGHPART)]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w ; *              ] <su>mulh\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<su>mulh\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
***************
*** 4568,4575 ****
  	   (match_operand:SVE_FULL_I 4 "aarch64_simd_imm_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3  ]
!      [ &w       , Upl , %0 , w  ] movprfx\t%0.<Vetype>, %1/z, %0.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ &w       , Upl , w  , w  ] movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    [(set_attr "movprfx" "yes")])
--- 4568,4575 ----
  	   (match_operand:SVE_FULL_I 4 "aarch64_simd_imm_zero")]
  	  UNSPEC_SEL))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3  ]
!      [ &w       , Upl , 0  , w  ] movprfx\t%0.<Vetype>, %1/z, %0.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ &w       , Upl , w  , w  ] movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    [(set_attr "movprfx" "yes")])
***************
*** 4713,4720 ****
  	  (match_operand:SVE_I 1 "register_operand")
  	  (match_operand:SVE_I 2 "aarch64_sve_logical_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1  , 2   ; attrs: movprfx ]
!      [ w        , %0 , vsl ; *              ] <logical>\t%0.<Vetype>, %0.<Vetype>, #%C2
       [ ?w       , w  , vsl ; yes            ] movprfx\t%0, %1\;<logical>\t%0.<Vetype>, %0.<Vetype>, #%C2
       [ w        , w  , w   ; *              ] <logical>\t%0.d, %1.d, %2.d
    }
--- 4713,4720 ----
  	  (match_operand:SVE_I 1 "register_operand")
  	  (match_operand:SVE_I 2 "aarch64_sve_logical_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , %1 , 2   ; attrs: movprfx ]
!      [ w        , 0  , vsl ; *              ] <logical>\t%0.<Vetype>, %0.<Vetype>, #%C2
       [ ?w       , w  , vsl ; yes            ] movprfx\t%0, %1\;<logical>\t%0.<Vetype>, %0.<Vetype>, #%C2
       [ w        , w  , w   ; *              ] <logical>\t%0.d, %1.d, %2.d
    }
***************
*** 5753,5760 ****
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_arith_with_sub_operand")]
  	  SVE_COND_FP_ADD))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3   , 4   ; attrs: movprfx ]
!      [ w        , Upl , %0 , vsA , i   ; *              ] fadd\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , 0  , vsN , i   ; *              ] fsub\t%0.<Vetype>, %1/m, %0.<Vetype>, #%N3
       [ w        , Upl , w  , w   , Z   ; *              ] #
       [ w        , Upl , 0  , w   , Ui1 ; *              ] fadd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
--- 5753,5760 ----
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_arith_with_sub_operand")]
  	  SVE_COND_FP_ADD))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3   , 4   ; attrs: movprfx ]
!      [ w        , Upl , 0  , vsA , i   ; *              ] fadd\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , 0  , vsN , i   ; *              ] fsub\t%0.<Vetype>, %1/m, %0.<Vetype>, #%N3
       [ w        , Upl , w  , w   , Z   ; *              ] #
       [ w        , Upl , 0  , w   , Ui1 ; *              ] fadd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
***************
*** 6228,6235 ****
  	     UNSPEC_COND_FSUB)]
  	  UNSPEC_COND_FABS))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w ; *              ] fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    "&& !rtx_equal_p (operands[1], operands[5])"
--- 6228,6235 ----
  	     UNSPEC_COND_FSUB)]
  	  UNSPEC_COND_FABS))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w ; *              ] fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    "&& !rtx_equal_p (operands[1], operands[5])"
***************
*** 6251,6258 ****
  	     UNSPEC_COND_FSUB)]
  	  UNSPEC_COND_FABS))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w ; *              ] fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
--- 6251,6258 ----
  	     UNSPEC_COND_FSUB)]
  	  UNSPEC_COND_FABS))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w ; *              ] fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;fabd\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
  )
***************
*** 6492,6499 ****
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_mul_operand")]
  	  SVE_COND_FP_MUL))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3   , 4   ; attrs: movprfx ]
!      [ w        , Upl , %0 , vsM , i   ; *              ] fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , w  , w   , Z   ; *              ] #
       [ w        , Upl , 0  , w   , Ui1 ; *              ] fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , vsM , i   ; yes            ] movprfx\t%0, %2\;fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
--- 6492,6499 ----
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_mul_operand")]
  	  SVE_COND_FP_MUL))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3   , 4   ; attrs: movprfx ]
!      [ w        , Upl , 0  , vsM , i   ; *              ] fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , w  , w   , Z   ; *              ] #
       [ w        , Upl , 0  , w   , Ui1 ; *              ] fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , vsM , i   ; yes            ] movprfx\t%0, %2\;fmul\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
***************
*** 6726,6733 ****
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_maxmin_operand")]
  	  SVE_COND_FP_MAXMIN))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3   ; attrs: movprfx ]
!      [ w        , Upl , %0 , vsB ; *              ] <sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , 0  , w   ; *              ] <sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , vsB ; yes            ] movprfx\t%0, %2\;<sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ ?&w      , Upl , w  , w   ; yes            ] movprfx\t%0, %2\;<sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
--- 6726,6733 ----
  	   (match_operand:SVE_FULL_F 3 "aarch64_sve_float_maxmin_operand")]
  	  SVE_COND_FP_MAXMIN))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3   ; attrs: movprfx ]
!      [ w        , Upl , 0  , vsB ; *              ] <sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ w        , Upl , 0  , w   ; *              ] <sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , vsB ; yes            ] movprfx\t%0, %2\;<sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
       [ ?&w      , Upl , w  , w   ; yes            ] movprfx\t%0, %2\;<sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
***************
*** 7035,7042 ****
  	    UNSPEC_PRED_X)
  	  (match_operand:SVE_I 4 "register_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 , 4 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w , w ; *              ] mad\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ w        , Upl , w  , w , 0 ; *              ] mla\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes            ] movprfx\t%0, %4\;mla\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
--- 7035,7042 ----
  	    UNSPEC_PRED_X)
  	  (match_operand:SVE_I 4 "register_operand")))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 , 4 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w , w ; *              ] mad\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ w        , Upl , w  , w , 0 ; *              ] mla\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes            ] movprfx\t%0, %4\;mla\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
***************
*** 7177,7184 ****
  	       (match_operand:SVE_I 3 "register_operand"))]
  	    UNSPEC_PRED_X)))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , 2  , 3 , 4 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w , w ; *              ] msb\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ w        , Upl , w  , w , 0 ; *              ] mls\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes            ] movprfx\t%0, %4\;mls\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
--- 7177,7184 ----
  	       (match_operand:SVE_I 3 "register_operand"))]
  	    UNSPEC_PRED_X)))]
    "TARGET_SVE"
!   {@ [ cons: =0 , 1   , %2 , 3 , 4 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w , w ; *              ] msb\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ w        , Upl , w  , w , 0 ; *              ] mls\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes            ] movprfx\t%0, %4\;mls\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
***************
*** 7459,7466 ****
  	   (match_operand:SVE_FULL_F_BF 4 "register_operand")]
  	  SVE_COND_FP_TERNARY))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
!   {@ [ cons: =0 , 1   , 2  , 3 , 4 ; attrs: movprfx , is_rev ]
!      [ w        , Upl , %w , w , 0 ; *   , *    ] <b><sve_fmla_op>\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ w        , Upl , 0  , w , w ; *   , true ] <b><sve_fmad_op>\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes , *    ] movprfx\t%0, %4\;<b><sve_fmla_op>\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
--- 7459,7466 ----
  	   (match_operand:SVE_FULL_F_BF 4 "register_operand")]
  	  SVE_COND_FP_TERNARY))]
    "TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
!   {@ [ cons: =0 , 1   , %2  , 3 , 4 ; attrs: movprfx , is_rev ]
!      [ w        , Upl , w , w , 0 ; *   , *    ] <b><sve_fmla_op>\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
       [ w        , Upl , 0  , w , w ; *   , true ] <b><sve_fmad_op>\t%0.<Vetype>, %1/m, %3.<Vetype>, %4.<Vetype>
       [ ?&w      , Upl , w  , w , w ; yes , *    ] movprfx\t%0, %4\;<b><sve_fmla_op>\t%0.<Vetype>, %1/m, %2.<Vetype>, %3.<Vetype>
    }
diff -Nrcpad gcc-15-20250712/gcc/config/aarch64/aarch64-sve2.md gcc-15-20250719/gcc/config/aarch64/aarch64-sve2.md
*** gcc-15-20250712/gcc/config/aarch64/aarch64-sve2.md	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/aarch64/aarch64-sve2.md	Sat Jul 19 22:32:14 2025
***************
*** 784,791 ****
  	    (match_operand:SVE_FULL_I 2 "register_operand"))
  	  (match_operand:SVE_FULL_I 3 "register_operand")))]
    "TARGET_SVE2p1_OR_SME"
!   {@ [cons: =0,  1, 2, 3; attrs: movprfx]
!      [       w, %0, w, w; *             ] <su>clamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
       [     ?&w,  w, w, w; yes           ] movprfx\t%0, %1\;<su>clamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
    }
  )
--- 784,791 ----
  	    (match_operand:SVE_FULL_I 2 "register_operand"))
  	  (match_operand:SVE_FULL_I 3 "register_operand")))]
    "TARGET_SVE2p1_OR_SME"
!   {@ [cons: =0, %1, 2, 3; attrs: movprfx]
!      [       w,  0, w, w; *             ] <su>clamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
       [     ?&w,  w, w, w; yes           ] movprfx\t%0, %1\;<su>clamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
    }
  )
***************
*** 804,811 ****
  	     (match_operand:SVE_FULL_I 3 "register_operand"))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2p1_OR_SME"
!   {@ [cons: =0,  1, 2, 3; attrs: movprfx]
!      [       w, %0, w, w; *             ] #
       [     ?&w,  w, w, w; yes           ] #
    }
    "&& true"
--- 804,811 ----
  	     (match_operand:SVE_FULL_I 3 "register_operand"))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2p1_OR_SME"
!   {@ [cons: =0, %1, 2, 3; attrs: movprfx]
!      [       w,  0, w, w; *             ] #
       [     ?&w,  w, w, w; yes           ] #
    }
    "&& true"
***************
*** 1373,1380 ****
  	   (match_operand:SVE_CLAMP_F 3 "register_operand")]
  	  UNSPEC_FMINNM))]
    ""
!   {@ [cons: =0,  1, 2, 3; attrs: movprfx]
!      [       w, %0, w, w; *             ] <b>fclamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
       [     ?&w,  w, w, w; yes           ] movprfx\t%0, %1\;<b>fclamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
    }
  )
--- 1373,1380 ----
  	   (match_operand:SVE_CLAMP_F 3 "register_operand")]
  	  UNSPEC_FMINNM))]
    ""
!   {@ [cons: =0, %1, 2, 3; attrs: movprfx]
!      [       w,  0, w, w; *             ] <b>fclamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
       [     ?&w,  w, w, w; yes           ] movprfx\t%0, %1\;<b>fclamp\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
    }
  )
***************
*** 1393,1400 ****
  	   (match_operand:SVE_CLAMP_F 3 "register_operand")]
  	  UNSPEC_COND_FMINNM))]
    ""
!   {@ [cons: =0,  1, 2, 3; attrs: movprfx]
!      [       w, %0, w, w; *             ] #
       [     ?&w,  w, w, w; yes           ] #
    }
    "&& true"
--- 1393,1400 ----
  	   (match_operand:SVE_CLAMP_F 3 "register_operand")]
  	  UNSPEC_COND_FMINNM))]
    ""
!   {@ [cons: =0, %1, 2, 3; attrs: movprfx]
!      [       w,  0, w, w; *             ] #
       [     ?&w,  w, w, w; yes           ] #
    }
    "&& true"
***************
*** 1626,1634 ****
  	       (match_operand:SVE_FULL_I 2 "register_operand")))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2"
!   {@ [ cons: =0 , 1  , 2 ; attrs: movprfx ]
!      [ w        , %0 , w ; *              ] nbsl\t%0.d, %0.d, %2.d, %0.d
!      [ ?&w      , w  , w ; yes            ] movprfx\t%0, %1\;nbsl\t%0.d, %0.d, %2.d, %0.d
    }
    "&& !CONSTANT_P (operands[3])"
    {
--- 1626,1634 ----
  	       (match_operand:SVE_FULL_I 2 "register_operand")))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2"
!   {@ [ cons: =0 , %1 , 2 ; attrs: movprfx ]
!      [ w        , 0  , w ; *              ] nbsl\t%0.d, %0.d, %2.d, %0.d
!      [ ?&w      , w  , w ; yes            ] movprfx\t%0, %1\;nbsl\t%0.d, %0.d, %2.d, %1.d
    }
    "&& !CONSTANT_P (operands[3])"
    {
***************
*** 1648,1655 ****
  	       (match_operand:SVE_FULL_I 2 "register_operand")))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2"
!   {@ [ cons: =0 , 1  , 2 ; attrs: movprfx ]
!      [ w        , %0 , w ; *              ] nbsl\t%0.d, %0.d, %2.d, %2.d
       [ ?&w      , w  , w ; yes            ] movprfx\t%0, %1\;nbsl\t%0.d, %0.d, %2.d, %2.d
    }
    "&& !CONSTANT_P (operands[3])"
--- 1648,1655 ----
  	       (match_operand:SVE_FULL_I 2 "register_operand")))]
  	  UNSPEC_PRED_X))]
    "TARGET_SVE2"
!   {@ [ cons: =0 , %1 , 2 ; attrs: movprfx ]
!      [ w        , 0  , w ; *              ] nbsl\t%0.d, %0.d, %2.d, %2.d
       [ ?&w      , w  , w ; yes            ] movprfx\t%0, %1\;nbsl\t%0.d, %0.d, %2.d, %2.d
    }
    "&& !CONSTANT_P (operands[3])"
***************
*** 2951,2958 ****
  	     UNSPEC_COND_FABS)]
  	  SVE_COND_SMAXMIN))]
    "TARGET_FAMINMAX && TARGET_SVE2_OR_SME2"
!   {@ [ cons: =0 , 1   , 2  , 3 ; attrs: movprfx ]
!      [ w        , Upl , %0 , w ; *              ] <faminmax_cond_uns_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<faminmax_cond_uns_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    "&& (!rtx_equal_p (operands[1], operands[5])
--- 2951,2958 ----
  	     UNSPEC_COND_FABS)]
  	  SVE_COND_SMAXMIN))]
    "TARGET_FAMINMAX && TARGET_SVE2_OR_SME2"
!   {@ [ cons: =0 , 1   , %2 , 3 ; attrs: movprfx ]
!      [ w        , Upl , 0  , w ; *              ] <faminmax_cond_uns_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
       [ ?&w      , Upl , w  , w ; yes            ] movprfx\t%0, %2\;<faminmax_cond_uns_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
    }
    "&& (!rtx_equal_p (operands[1], operands[5])
diff -Nrcpad gcc-15-20250712/gcc/config/aarch64/aarch64.md gcc-15-20250719/gcc/config/aarch64/aarch64.md
*** gcc-15-20250712/gcc/config/aarch64/aarch64.md	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/aarch64/aarch64.md	Sat Jul 19 22:32:14 2025
***************
*** 2189,2197 ****
    "aarch64_mem_pair_offset (operands[4], <MODE>mode)
     && known_eq (INTVAL (operands[5]),
  		INTVAL (operands[4]) + GET_MODE_SIZE (<MODE>mode))"
!   {@ [cons: =&0, 1, =2, =3; attrs: type     ]
!      [       rk, 0,  r,  r; load_<ldpstp_sz>] ldp\t%<w>2, %<w>3, [%0, %4]!
!      [       rk, 0,  w,  w; neon_load1_2reg ] ldp\t%<v>2, %<v>3, [%0, %4]!
    }
  )
  
--- 2189,2197 ----
    "aarch64_mem_pair_offset (operands[4], <MODE>mode)
     && known_eq (INTVAL (operands[5]),
  		INTVAL (operands[4]) + GET_MODE_SIZE (<MODE>mode))"
!   {@ [cons: =0,   1, =2, =3; attrs: type     ]
!      [       &rk, 0,  r,  r; load_<ldpstp_sz>] ldp\t%<w>2, %<w>3, [%0, %4]!
!      [       rk,  0,  w,  w; neon_load1_2reg ] ldp\t%<v>2, %<v>3, [%0, %4]!
    }
  )
  
***************
*** 2245,2253 ****
  		INTVAL (operands[4]) + GET_MODE_SIZE (<MODE>mode))
     && !reg_overlap_mentioned_p (operands[0], operands[2])
     && !reg_overlap_mentioned_p (operands[0], operands[3])"
!   {@ [cons: =&0, 1,   2,   3; attrs: type      ]
!      [       rk, 0, rYZ, rYZ; store_<ldpstp_sz>] stp\t%<w>2, %<w>3, [%0, %4]!
!      [       rk, 0,   w,   w; neon_store1_2reg ] stp\t%<v>2, %<v>3, [%0, %4]!
    }
  )
  
--- 2245,2253 ----
  		INTVAL (operands[4]) + GET_MODE_SIZE (<MODE>mode))
     && !reg_overlap_mentioned_p (operands[0], operands[2])
     && !reg_overlap_mentioned_p (operands[0], operands[3])"
!   {@ [cons: =0, 1,   2,   3; attrs: type      ]
!      [     &rk, 0, rYZ, rYZ; store_<ldpstp_sz>] stp\t%<w>2, %<w>3, [%0, %4]!
!      [      rk, 0,   w,   w; neon_store1_2reg ] stp\t%<v>2, %<v>3, [%0, %4]!
    }
  )
  
***************
*** 2493,2507 ****
       (match_operand:GPI 1 "register_operand")
       (match_operand:GPI 2 "aarch64_pluslong_operand")))]
    ""
!   {@ [ cons: =0 , 1   , 2   ; attrs: type , arch  ]
!      [ rk       , %rk , I   ; alu_imm     , *     ] add\t%<w>0, %<w>1, %2
!      [ rk       , rk  , r   ; alu_sreg    , *     ] add\t%<w>0, %<w>1, %<w>2
!      [ w        , w   , w   ; neon_add    , simd  ] add\t%<rtn>0<vas>, %<rtn>1<vas>, %<rtn>2<vas>
!      [ rk       , rk  , J   ; alu_imm     , *     ] sub\t%<w>0, %<w>1, #%n2
!      [ r        , rk  , Uaa ; multiple    , *     ] #
!      [ r        , 0   , Uai ; alu_imm     , sve   ] << aarch64_output_sve_scalar_inc_dec (operands[2]);
!      [ rk       , rk  , Uav ; alu_imm     , sve   ] << aarch64_output_sve_addvl_addpl (operands[2]);
!      [ rk       , rk  , UaV ; alu_imm     , sme   ] << aarch64_output_addsvl_addspl (operands[2]);
    }
    ;; The "alu_imm" types for INC/DEC and ADDVL/ADDPL are just placeholders.
  )
--- 2493,2507 ----
       (match_operand:GPI 1 "register_operand")
       (match_operand:GPI 2 "aarch64_pluslong_operand")))]
    ""
!   {@ [ cons: =0 , %1 , 2   ; attrs: type , arch  ]
!      [ rk       , rk , I   ; alu_imm     , *     ] add\t%<w>0, %<w>1, %2
!      [ rk       , rk , r   ; alu_sreg    , *     ] add\t%<w>0, %<w>1, %<w>2
!      [ w        , w  , w   ; neon_add    , simd  ] add\t%<rtn>0<vas>, %<rtn>1<vas>, %<rtn>2<vas>
!      [ rk       , rk , J   ; alu_imm     , *     ] sub\t%<w>0, %<w>1, #%n2
!      [ r        , rk , Uaa ; multiple    , *     ] #
!      [ r        , 0  , Uai ; alu_imm     , sve   ] << aarch64_output_sve_scalar_inc_dec (operands[2]);
!      [ rk       , rk , Uav ; alu_imm     , sve   ] << aarch64_output_sve_addvl_addpl (operands[2]);
!      [ rk       , rk , UaV ; alu_imm     , sme   ] << aarch64_output_addsvl_addspl (operands[2]);
    }
    ;; The "alu_imm" types for INC/DEC and ADDVL/ADDPL are just placeholders.
  )
***************
*** 2514,2524 ****
       (plus:SI (match_operand:SI 1 "register_operand")
  	      (match_operand:SI 2 "aarch64_pluslong_operand"))))]
    ""
!   {@ [ cons: =0 , 1   , 2   ; attrs: type ]
!      [ rk       , %rk , I   ; alu_imm     ] add\t%w0, %w1, %2
!      [ rk       , rk  , r   ; alu_sreg    ] add\t%w0, %w1, %w2
!      [ rk       , rk  , J   ; alu_imm     ] sub\t%w0, %w1, #%n2
!      [ r        , rk  , Uaa ; multiple    ] #
    }
  )
  
--- 2514,2524 ----
       (plus:SI (match_operand:SI 1 "register_operand")
  	      (match_operand:SI 2 "aarch64_pluslong_operand"))))]
    ""
!   {@ [ cons: =0 , %1 , 2   ; attrs: type ]
!      [ rk       , rk , I   ; alu_imm     ] add\t%w0, %w1, %2
!      [ rk       , rk , r   ; alu_sreg    ] add\t%w0, %w1, %w2
!      [ rk       , rk , J   ; alu_imm     ] sub\t%w0, %w1, #%n2
!      [ r        , rk , Uaa ; multiple    ] #
    }
  )
  
***************
*** 2587,2600 ****
       (match_operand:GPI 1 "register_operand")
       (match_operand:GPI 2 "aarch64_pluslong_or_poly_operand")))]
    "TARGET_SVE && operands[0] != stack_pointer_rtx"
!   {@ [ cons: =0 , 1   , 2   ; attrs: type ]
!      [ r        , %rk , I   ; alu_imm     ] add\t%<w>0, %<w>1, %2
!      [ r        , rk  , r   ; alu_sreg    ] add\t%<w>0, %<w>1, %<w>2
!      [ r        , rk  , J   ; alu_imm     ] sub\t%<w>0, %<w>1, #%n2
!      [ r        , rk  , Uaa ; multiple    ] #
!      [ r        , 0   , Uai ; alu_imm     ] << aarch64_output_sve_scalar_inc_dec (operands[2]);
!      [ r        , rk  , Uav ; alu_imm     ] << aarch64_output_sve_addvl_addpl (operands[2]);
!      [ &r       , rk  , Uat ; multiple    ] #
    }
    "&& epilogue_completed
     && !reg_overlap_mentioned_p (operands[0], operands[1])
--- 2587,2600 ----
       (match_operand:GPI 1 "register_operand")
       (match_operand:GPI 2 "aarch64_pluslong_or_poly_operand")))]
    "TARGET_SVE && operands[0] != stack_pointer_rtx"
!   {@ [ cons: =0 , %1 , 2   ; attrs: type ]
!      [ r        , rk , I   ; alu_imm     ] add\t%<w>0, %<w>1, %2
!      [ r        , rk , r   ; alu_sreg    ] add\t%<w>0, %<w>1, %<w>2
!      [ r        , rk , J   ; alu_imm     ] sub\t%<w>0, %<w>1, #%n2
!      [ r        , rk , Uaa ; multiple    ] #
!      [ r        , 0  , Uai ; alu_imm     ] << aarch64_output_sve_scalar_inc_dec (operands[2]);
!      [ r        , rk , Uav ; alu_imm     ] << aarch64_output_sve_addvl_addpl (operands[2]);
!      [ &r       , rk , Uat ; multiple    ] #
    }
    "&& epilogue_completed
     && !reg_overlap_mentioned_p (operands[0], operands[1])
***************
*** 2766,2775 ****
     (set (match_operand:GPI 0 "register_operand")
  	(plus:GPI (match_dup 1) (match_dup 2)))]
    ""
!   {@ [ cons: =0 , 1   , 2 ; attrs: type ]
!      [ r        , %rk , r ; alus_sreg   ] adds\t%<w>0, %<w>1, %<w>2
!      [ r        , rk  , I ; alus_imm    ] adds\t%<w>0, %<w>1, %2
!      [ r        , rk  , J ; alus_imm    ] subs\t%<w>0, %<w>1, #%n2
    }
  )
  
--- 2766,2775 ----
     (set (match_operand:GPI 0 "register_operand")
  	(plus:GPI (match_dup 1) (match_dup 2)))]
    ""
!   {@ [ cons: =0 , %1 , 2 ; attrs: type ]
!      [ r        , rk , r ; alus_sreg   ] adds\t%<w>0, %<w>1, %<w>2
!      [ r        , rk , I ; alus_imm    ] adds\t%<w>0, %<w>1, %2
!      [ r        , rk , J ; alus_imm    ] subs\t%<w>0, %<w>1, #%n2
    }
  )
  
***************
*** 2783,2792 ****
     (set (match_operand:DI 0 "register_operand")
  	(zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
    ""
!   {@ [ cons: =0 , 1   , 2 ; attrs: type ]
!      [ r        , %rk , r ; alus_sreg   ] adds\t%w0, %w1, %w2
!      [ r        , rk  , I ; alus_imm    ] adds\t%w0, %w1, %2
!      [ r        , rk  , J ; alus_imm    ] subs\t%w0, %w1, #%n2
    }
  )
  
--- 2783,2792 ----
     (set (match_operand:DI 0 "register_operand")
  	(zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
    ""
!   {@ [ cons: =0 , %1 , 2 ; attrs: type ]
!      [ r        , rk , r ; alus_sreg   ] adds\t%w0, %w1, %w2
!      [ r        , rk , I ; alus_imm    ] adds\t%w0, %w1, %2
!      [ r        , rk , J ; alus_imm    ] subs\t%w0, %w1, #%n2
    }
  )
  
***************
*** 2987,2996 ****
  		   (match_operand:GPI 1 "aarch64_plus_operand"))
  	 (const_int 0)))]
    ""
!   {@ [ cons: 0 , 1 ; attrs: type ]
!      [ %r      , r ; alus_sreg   ] cmn\t%<w>0, %<w>1
!      [ r       , I ; alus_imm    ] cmn\t%<w>0, %1
!      [ r       , J ; alus_imm    ] cmp\t%<w>0, #%n1
    }
  )
  
--- 2987,2996 ----
  		   (match_operand:GPI 1 "aarch64_plus_operand"))
  	 (const_int 0)))]
    ""
!   {@ [ cons: %0 , 1 ; attrs: type ]
!      [ r        , r ; alus_sreg   ] cmn\t%<w>0, %<w>1
!      [ r        , I ; alus_imm    ] cmn\t%<w>0, %1
!      [ r        , J ; alus_imm    ] cmp\t%<w>0, #%n1
    }
  )
  
***************
*** 5053,5060 ****
  	(LOGICAL:GPI (match_operand:GPI 1 "register_operand")
  		     (match_operand:GPI 2 "aarch64_logical_operand")))]
    ""
!   {@ [ cons: =0 , 1  , 2        ; attrs: type , arch  ]
!      [ r        , %r , r        ; logic_reg   , *     ] <logical>\t%<w>0, %<w>1, %<w>2
       [ rk       , r  , <lconst> ; logic_imm   , *     ] <logical>\t%<w>0, %<w>1, %2
       [ w        , 0  , <lconst> ; *           , sve   ] <logical>\t%Z0.<s>, %Z0.<s>, #%2
       [ w        , w  , w        ; neon_logic  , simd  ] <logical>\t%0.<Vbtype>, %1.<Vbtype>, %2.<Vbtype>
--- 5053,5060 ----
  	(LOGICAL:GPI (match_operand:GPI 1 "register_operand")
  		     (match_operand:GPI 2 "aarch64_logical_operand")))]
    ""
!   {@ [ cons: =0 , %1 , 2        ; attrs: type , arch  ]
!      [ r        , r  , r        ; logic_reg   , *     ] <logical>\t%<w>0, %<w>1, %<w>2
       [ rk       , r  , <lconst> ; logic_imm   , *     ] <logical>\t%<w>0, %<w>1, %2
       [ w        , 0  , <lconst> ; *           , sve   ] <logical>\t%Z0.<s>, %Z0.<s>, #%2
       [ w        , w  , w        ; neon_logic  , simd  ] <logical>\t%0.<Vbtype>, %1.<Vbtype>, %2.<Vbtype>
***************
*** 5068,5075 ****
           (LOGICAL:SI (match_operand:SI 1 "register_operand")
  		     (match_operand:SI 2 "aarch64_logical_operand"))))]
    ""
!   {@ [ cons: =0 , 1  , 2 ; attrs: type ]
!      [ r        , %r , r ; logic_reg   ] <logical>\t%w0, %w1, %w2
       [ rk       , r  , K ; logic_imm   ] <logical>\t%w0, %w1, %2
    }
  )
--- 5068,5075 ----
           (LOGICAL:SI (match_operand:SI 1 "register_operand")
  		     (match_operand:SI 2 "aarch64_logical_operand"))))]
    ""
!   {@ [ cons: =0 , %1 , 2 ; attrs: type ]
!      [ r        , r  , r ; logic_reg   ] <logical>\t%w0, %w1, %w2
       [ rk       , r  , K ; logic_imm   ] <logical>\t%w0, %w1, %2
    }
  )
***************
*** 5083,5090 ****
     (set (match_operand:GPI 0 "register_operand")
  	(and:GPI (match_dup 1) (match_dup 2)))]
    ""
!   {@ [ cons: =0 , 1  , 2        ; attrs: type ]
!      [ r        , %r , r        ; logics_reg  ] ands\t%<w>0, %<w>1, %<w>2
       [ r        , r  , <lconst> ; logics_imm  ] ands\t%<w>0, %<w>1, %2
    }
  )
--- 5083,5090 ----
     (set (match_operand:GPI 0 "register_operand")
  	(and:GPI (match_dup 1) (match_dup 2)))]
    ""
!   {@ [ cons: =0 , %1 , 2        ; attrs: type ]
!      [ r        , r  , r        ; logics_reg  ] ands\t%<w>0, %<w>1, %<w>2
       [ r        , r  , <lconst> ; logics_imm  ] ands\t%<w>0, %<w>1, %2
    }
  )
***************
*** 5099,5106 ****
     (set (match_operand:DI 0 "register_operand")
  	(zero_extend:DI (and:SI (match_dup 1) (match_dup 2))))]
    ""
!   {@ [ cons: =0 , 1  , 2 ; attrs: type ]
!      [ r        , %r , r ; logics_reg  ] ands\t%w0, %w1, %w2
       [ r        , r  , K ; logics_imm  ] ands\t%w0, %w1, %2
    }
  )
--- 5099,5106 ----
     (set (match_operand:DI 0 "register_operand")
  	(zero_extend:DI (and:SI (match_dup 1) (match_dup 2))))]
    ""
!   {@ [ cons: =0 , %1 , 2 ; attrs: type ]
!      [ r        , r  , r ; logics_reg  ] ands\t%w0, %w1, %w2
       [ r        , r  , K ; logics_imm  ] ands\t%w0, %w1, %2
    }
  )
***************
*** 5684,5692 ****
  		  (match_operand:GPI 1 "aarch64_logical_operand"))
  	 (const_int 0)))]
    ""
!   {@ [ cons: 0 , 1        ; attrs: type ]
!      [ %r      , r        ; logics_reg  ] tst\t%<w>0, %<w>1
!      [ r       , <lconst> ; logics_imm  ] tst\t%<w>0, %1
    }
  )
  
--- 5684,5692 ----
  		  (match_operand:GPI 1 "aarch64_logical_operand"))
  	 (const_int 0)))]
    ""
!   {@ [ cons: %0 , 1        ; attrs: type ]
!      [ r        , r        ; logics_reg  ] tst\t%<w>0, %<w>1
!      [ r        , <lconst> ; logics_imm  ] tst\t%<w>0, %1
    }
  )
  
diff -Nrcpad gcc-15-20250712/gcc/config/i386/i386.cc gcc-15-20250719/gcc/config/i386/i386.cc
*** gcc-15-20250712/gcc/config/i386/i386.cc	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/i386/i386.cc	Sat Jul 19 22:32:14 2025
*************** legitimize_tls_address (rtx x, enum tls_
*** 12231,12241 ****
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
  	      rtx_insn *insns;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_global_dynamic_64 (Pmode, rax, x, caddr));
  	      insns = get_insns ();
  	      end_sequence ();
  
--- 12231,12242 ----
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
+ 	      rtx rdi = gen_rtx_REG (Pmode, DI_REG);
  	      rtx_insn *insns;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_global_dynamic_64 (Pmode, rax, x, caddr, rdi));
  	      insns = get_insns ();
  	      end_sequence ();
  
*************** legitimize_tls_address (rtx x, enum tls_
*** 12285,12296 ****
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
  	      rtx_insn *insns;
  	      rtx eqv;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_local_dynamic_base_64 (Pmode, rax, caddr));
  	      insns = get_insns ();
  	      end_sequence ();
  
--- 12286,12298 ----
  	  if (TARGET_64BIT)
  	    {
  	      rtx rax = gen_rtx_REG (Pmode, AX_REG);
+ 	      rtx rdi = gen_rtx_REG (Pmode, DI_REG);
  	      rtx_insn *insns;
  	      rtx eqv;
  
  	      start_sequence ();
  	      emit_call_insn
! 		(gen_tls_local_dynamic_base_64 (Pmode, rax, caddr, rdi));
  	      insns = get_insns ();
  	      end_sequence ();
  
diff -Nrcpad gcc-15-20250712/gcc/config/i386/i386.h gcc-15-20250719/gcc/config/i386/i386.h
*** gcc-15-20250712/gcc/config/i386/i386.h	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/i386/i386.h	Sat Jul 19 22:32:14 2025
*************** constexpr wide_int_bitmask PTA_ARROWLAKE
*** 2442,2451 ****
    | PTA_AVXVNNIINT8 | PTA_AVXNECONVERT | PTA_CMPCCXADD | PTA_UINTR;
  constexpr wide_int_bitmask PTA_ARROWLAKE_S = PTA_ARROWLAKE | PTA_AVXVNNIINT16
    | PTA_SHA512 | PTA_SM3 | PTA_SM4;
! constexpr wide_int_bitmask PTA_CLEARWATERFOREST = PTA_SIERRAFOREST
!   | PTA_AVXVNNIINT16 | PTA_SHA512 | PTA_SM3 | PTA_SM4 | PTA_USER_MSR
!   | PTA_PREFETCHI;
! constexpr wide_int_bitmask PTA_PANTHERLAKE = PTA_ARROWLAKE_S | PTA_PREFETCHI;
  constexpr wide_int_bitmask PTA_DIAMONDRAPIDS = PTA_SKYLAKE | PTA_PKU | PTA_SHA
    | PTA_GFNI | PTA_VAES | PTA_VPCLMULQDQ | PTA_RDPID | PTA_PCONFIG
    | PTA_WBNOINVD | PTA_CLWB | PTA_MOVDIRI | PTA_MOVDIR64B | PTA_ENQCMD
--- 2442,2452 ----
    | PTA_AVXVNNIINT8 | PTA_AVXNECONVERT | PTA_CMPCCXADD | PTA_UINTR;
  constexpr wide_int_bitmask PTA_ARROWLAKE_S = PTA_ARROWLAKE | PTA_AVXVNNIINT16
    | PTA_SHA512 | PTA_SM3 | PTA_SM4;
! constexpr wide_int_bitmask PTA_CLEARWATERFOREST =
!   (PTA_SIERRAFOREST & (~(PTA_KL | PTA_WIDEKL))) | PTA_AVXVNNIINT16 | PTA_SHA512
!   | PTA_SM3 | PTA_SM4 | PTA_USER_MSR | PTA_PREFETCHI;
! constexpr wide_int_bitmask PTA_PANTHERLAKE =
!   (PTA_ARROWLAKE_S & (~(PTA_KL | PTA_WIDEKL))) | PTA_PREFETCHI;
  constexpr wide_int_bitmask PTA_DIAMONDRAPIDS = PTA_SKYLAKE | PTA_PKU | PTA_SHA
    | PTA_GFNI | PTA_VAES | PTA_VPCLMULQDQ | PTA_RDPID | PTA_PCONFIG
    | PTA_WBNOINVD | PTA_CLWB | PTA_MOVDIRI | PTA_MOVDIR64B | PTA_ENQCMD
diff -Nrcpad gcc-15-20250712/gcc/config/i386/i386.md gcc-15-20250719/gcc/config/i386/i386.md
*** gcc-15-20250712/gcc/config/i386/i386.md	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/i386/i386.md	Sat Jul 19 22:32:14 2025
***************
*** 22992,22998 ****
  	 (match_operand 3)))
     (unspec:P [(match_operand 1 "tls_symbolic_operand")
  	      (reg:P SP_REG)]
! 	     UNSPEC_TLS_GD)]
    "TARGET_64BIT"
  {
    if (!TARGET_X32)
--- 22992,22999 ----
  	 (match_operand 3)))
     (unspec:P [(match_operand 1 "tls_symbolic_operand")
  	      (reg:P SP_REG)]
! 	     UNSPEC_TLS_GD)
!    (clobber (match_operand:P 4 "register_operand" "=D"))]
    "TARGET_64BIT"
  {
    if (!TARGET_X32)
***************
*** 23009,23015 ****
         Use data16 prefix instead, which doesn't have this problem.  */
      fputs ("\tdata16", asm_out_file);
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %%rdi|rdi, %E1@tlsgd[rip]}", operands);
    if (TARGET_SUN_TLS || flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
      fputs (ASM_SHORT "0x6666\n", asm_out_file);
    else
--- 23010,23016 ----
         Use data16 prefix instead, which doesn't have this problem.  */
      fputs ("\tdata16", asm_out_file);
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %q4|%q4, %E1@tlsgd[rip]}", operands);
    if (TARGET_SUN_TLS || flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
      fputs (ASM_SHORT "0x6666\n", asm_out_file);
    else
***************
*** 23033,23046 ****
  	 (match_operand 4)))
     (unspec:DI [(match_operand 1 "tls_symbolic_operand")
  	       (reg:DI SP_REG)]
! 	      UNSPEC_TLS_GD)]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[3]) == CONST
     && GET_CODE (XEXP (operands[3], 0)) == UNSPEC
     && XINT (XEXP (operands[3], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %%rdi|rdi, %E1@tlsgd[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%3, %%rax|rax, %3}", operands);
    output_asm_insn ("add{q}\t{%2, %%rax|rax, %2}", operands);
    return "call\t{*%%rax|rax}";
--- 23034,23048 ----
  	 (match_operand 4)))
     (unspec:DI [(match_operand 1 "tls_symbolic_operand")
  	       (reg:DI SP_REG)]
! 	      UNSPEC_TLS_GD)
!    (clobber (match_operand:DI 5 "register_operand" "=D"))]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[3]) == CONST
     && GET_CODE (XEXP (operands[3], 0)) == UNSPEC
     && XINT (XEXP (operands[3], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%E1@tlsgd(%%rip), %5|%5, %E1@tlsgd[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%3, %%rax|rax, %3}", operands);
    output_asm_insn ("add{q}\t{%2, %%rax|rax, %2}", operands);
    return "call\t{*%%rax|rax}";
***************
*** 23056,23062 ****
  	   (const_int 0)))
       (unspec:P [(match_operand 1 "tls_symbolic_operand")
  		(reg:P SP_REG)]
! 	       UNSPEC_TLS_GD)])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
--- 23058,23065 ----
  	   (const_int 0)))
       (unspec:P [(match_operand 1 "tls_symbolic_operand")
  		(reg:P SP_REG)]
! 	       UNSPEC_TLS_GD)
!      (clobber (match_operand:P 3 "register_operand"))])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
***************
*** 23107,23117 ****
  	(call:P
  	 (mem:QI (match_operand 1 "constant_call_address_operand" "Bz"))
  	 (match_operand 2)))
!    (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)]
    "TARGET_64BIT"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}", operands);
    if (TARGET_SUN_TLS)
      return "call\t%p1@plt";
    if (flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
--- 23110,23121 ----
  	(call:P
  	 (mem:QI (match_operand 1 "constant_call_address_operand" "Bz"))
  	 (match_operand 2)))
!    (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)
!    (clobber (match_operand:P 3 "register_operand" "=D"))]
    "TARGET_64BIT"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %q3|%q3, %&@tlsld[rip]}", operands);
    if (TARGET_SUN_TLS)
      return "call\t%p1@plt";
    if (flag_plt || !HAVE_AS_IX86_TLS_GET_ADDR_GOT)
***************
*** 23127,23140 ****
  	 (mem:QI (plus:DI (match_operand:DI 1 "register_operand" "b")
  			  (match_operand:DI 2 "immediate_operand" "i")))
  	 (match_operand 3)))
!    (unspec:DI [(reg:DI SP_REG)] UNSPEC_TLS_LD_BASE)]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[2]) == CONST
     && GET_CODE (XEXP (operands[2], 0)) == UNSPEC
     && XINT (XEXP (operands[2], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%2, %%rax|rax, %2}", operands);
    output_asm_insn ("add{q}\t{%1, %%rax|rax, %1}", operands);
    return "call\t{*%%rax|rax}";
--- 23131,23145 ----
  	 (mem:QI (plus:DI (match_operand:DI 1 "register_operand" "b")
  			  (match_operand:DI 2 "immediate_operand" "i")))
  	 (match_operand 3)))
!    (unspec:DI [(reg:DI SP_REG)] UNSPEC_TLS_LD_BASE)
!    (clobber (match_operand:DI 4 "register_operand" "=D"))]
    "TARGET_64BIT && ix86_cmodel == CM_LARGE_PIC && !TARGET_PECOFF
     && GET_CODE (operands[2]) == CONST
     && GET_CODE (XEXP (operands[2], 0)) == UNSPEC
     && XINT (XEXP (operands[2], 0), 1) == UNSPEC_PLTOFF"
  {
    output_asm_insn
!     ("lea{q}\t{%&@tlsld(%%rip), %4|%4, %&@tlsld[rip]}", operands);
    output_asm_insn ("movabs{q}\t{%2, %%rax|rax, %2}", operands);
    output_asm_insn ("add{q}\t{%1, %%rax|rax, %1}", operands);
    return "call\t{*%%rax|rax}";
***************
*** 23148,23154 ****
  	   (call:P
  	    (mem:QI (match_operand 1))
  	    (const_int 0)))
!       (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
--- 23153,23160 ----
  	   (call:P
  	    (mem:QI (match_operand 1))
  	    (const_int 0)))
!       (unspec:P [(reg:P SP_REG)] UNSPEC_TLS_LD_BASE)
!       (clobber (match_operand:P 2 "register_operand"))])]
    "TARGET_64BIT"
    "ix86_tls_descriptor_calls_expanded_in_cfun = true;")
  
diff -Nrcpad gcc-15-20250712/gcc/config/loongarch/loongarch.md gcc-15-20250719/gcc/config/loongarch/loongarch.md
*** gcc-15-20250712/gcc/config/loongarch/loongarch.md	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/loongarch/loongarch.md	Sat Jul 19 22:32:14 2025
***************
*** 4573,4581 ****
    "&& true"
    [(set (match_dup 3) (match_dup 2))
     (set (match_dup 0)
! 	(unspec:SI [(match_dup 3) (subreg:SI (match_dup 1) 0)] CRC))]
    {
      operands[3] = gen_reg_rtx (<MODE>mode);
    })
  
  ;; With normal or medium code models, if the only use of a pc-relative
--- 4573,4582 ----
    "&& true"
    [(set (match_dup 3) (match_dup 2))
     (set (match_dup 0)
! 	(unspec:SI [(match_dup 3) (match_dup 1)] CRC))]
    {
      operands[3] = gen_reg_rtx (<MODE>mode);
+     operands[1] = lowpart_subreg (SImode, operands[1], DImode);
    })
  
  ;; With normal or medium code models, if the only use of a pc-relative
diff -Nrcpad gcc-15-20250712/gcc/config/mmix/mmix.h gcc-15-20250719/gcc/config/mmix/mmix.h
*** gcc-15-20250712/gcc/config/mmix/mmix.h	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/mmix/mmix.h	Sat Jul 19 22:32:14 2025
*************** struct GTY(()) machine_function
*** 184,189 ****
--- 184,192 ----
  /* The lower bits are ignored.  */
  #define STRICT_ALIGNMENT 1
  
+ /* With the default, (64 bits), most things still work, but code for
+    e.g. __int128 will be suboptimal. */
+ #define MAX_FIXED_MODE_SIZE (2 * BITS_PER_WORD)
  
  /* Node: Type Layout */
  
diff -Nrcpad gcc-15-20250712/gcc/config/riscv/constraints.md gcc-15-20250719/gcc/config/riscv/constraints.md
*** gcc-15-20250712/gcc/config/riscv/constraints.md	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/riscv/constraints.md	Sat Jul 19 22:32:14 2025
***************
*** 311,313 ****
--- 311,317 ----
    "Shifting immediate for SIMD shufflei3."
    (and (match_code "const_int")
         (match_test "IN_RANGE (ival, -64, -1)")))
+ 
+ (define_constraint "Q"
+   "An address operand that is valid for a prefetch instruction"
+   (match_operand 0 "prefetch_operand"))
diff -Nrcpad gcc-15-20250712/gcc/config/riscv/predicates.md gcc-15-20250719/gcc/config/riscv/predicates.md
*** gcc-15-20250712/gcc/config/riscv/predicates.md	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/riscv/predicates.md	Sat Jul 19 22:32:14 2025
***************
*** 27,32 ****
--- 27,44 ----
    (ior (match_operand 0 "const_arith_operand")
         (match_operand 0 "register_operand")))
  
+ ;; REG or REG+D where D fits in a simm12 and has the low 5 bits
+ ;; off.  The REG+D form can be reloaded into a temporary if needed
+ ;; after FP elimination if that exposes an invalid offset.
+ (define_predicate "prefetch_operand"
+   (ior (match_operand 0 "register_operand")
+        (and (match_test "const_arith_operand (op, VOIDmode)")
+ 	    (match_test "(INTVAL (op) & 0x1f) == 0"))
+        (and (match_code "plus")
+ 	    (match_test "register_operand (XEXP (op, 0), word_mode)")
+ 	    (match_test "const_arith_operand (XEXP (op, 1), VOIDmode)")
+ 	    (match_test "(INTVAL (XEXP (op, 1)) & 0x1f) == 0"))))
+ 
  (define_predicate "lui_operand"
    (and (match_code "const_int")
         (match_test "LUI_OPERAND (INTVAL (op))")))
diff -Nrcpad gcc-15-20250712/gcc/config/riscv/riscv-v.cc gcc-15-20250719/gcc/config/riscv/riscv-v.cc
*** gcc-15-20250712/gcc/config/riscv/riscv-v.cc	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/riscv/riscv-v.cc	Sat Jul 19 22:32:14 2025
*************** expand_const_vector (rtx target, rtx src
*** 1587,1593 ****
  		  rtx shift = gen_int_mode (1, Xmode);
  		  rtx shift_ops[] = {shifted_vid, vid, shift};
  		  emit_vlmax_insn (code_for_pred_scalar
! 				   (ASHIFT, mode), BINARY_OP,
  				   shift_ops);
  		}
  	      else
--- 1587,1593 ----
  		  rtx shift = gen_int_mode (1, Xmode);
  		  rtx shift_ops[] = {shifted_vid, vid, shift};
  		  emit_vlmax_insn (code_for_pred_scalar
! 				   (LSHIFTRT, mode), BINARY_OP,
  				   shift_ops);
  		}
  	      else
diff -Nrcpad gcc-15-20250712/gcc/config/riscv/riscv.md gcc-15-20250719/gcc/config/riscv/riscv.md
*** gcc-15-20250712/gcc/config/riscv/riscv.md	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/riscv/riscv.md	Sat Jul 19 22:32:14 2025
***************
*** 4378,4384 ****
  )
  
  (define_insn "prefetch"
!   [(prefetch (match_operand 0 "address_operand" "r")
               (match_operand 1 "imm5_operand" "i")
               (match_operand 2 "const_int_operand" "n"))]
    "TARGET_ZICBOP"
--- 4378,4384 ----
  )
  
  (define_insn "prefetch"
!   [(prefetch (match_operand 0 "prefetch_operand" "Qr")
               (match_operand 1 "imm5_operand" "i")
               (match_operand 2 "const_int_operand" "n"))]
    "TARGET_ZICBOP"
***************
*** 4398,4404 ****
  				      (const_string "4")))])
  
  (define_insn "riscv_prefetchi_<mode>"
!   [(unspec_volatile:X [(match_operand:X 0 "address_operand" "r")
                (match_operand:X 1 "imm5_operand" "i")]
                UNSPECV_PREI)]
    "TARGET_ZICBOP"
--- 4398,4404 ----
  				      (const_string "4")))])
  
  (define_insn "riscv_prefetchi_<mode>"
!   [(unspec_volatile:X [(match_operand:X 0 "prefetch_operand" "Q")
                (match_operand:X 1 "imm5_operand" "i")]
                UNSPECV_PREI)]
    "TARGET_ZICBOP"
diff -Nrcpad gcc-15-20250712/gcc/config/riscv/sync.md gcc-15-20250719/gcc/config/riscv/sync.md
*** gcc-15-20250712/gcc/config/riscv/sync.md	Sat Jul 12 22:32:31 2025
--- gcc-15-20250719/gcc/config/riscv/sync.md	Sat Jul 19 22:32:14 2025
***************
*** 628,634 ****
  	(match_operand:SHORT 1 "memory_operand" "+A"))				;; memory
     (set (match_dup 1)
  	(unspec_volatile:SHORT [(match_operand:SHORT 2 "register_operand" "0")  ;; expected_val
! 				(match_operand:SHORT 3 "register_operand" "rJ") ;; desired_val
  				(match_operand:SI 4 "const_int_operand")	;; mod_s
  				(match_operand:SI 5 "const_int_operand")]	;; mod_f
  	 UNSPEC_COMPARE_AND_SWAP))]
--- 628,634 ----
  	(match_operand:SHORT 1 "memory_operand" "+A"))				;; memory
     (set (match_dup 1)
  	(unspec_volatile:SHORT [(match_operand:SHORT 2 "register_operand" "0")  ;; expected_val
! 				(match_operand:SHORT 3 "reg_or_0_operand" "rJ") ;; desired_val
  				(match_operand:SI 4 "const_int_operand")	;; mod_s
  				(match_operand:SI 5 "const_int_operand")]	;; mod_f
  	 UNSPEC_COMPARE_AND_SWAP))]
diff -Nrcpad gcc-15-20250712/gcc/doc/extend.texi gcc-15-20250719/gcc/doc/extend.texi
*** gcc-15-20250712/gcc/doc/extend.texi	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/doc/extend.texi	Sat Jul 19 22:32:15 2025
*************** are 128-bit.  Only supported on targets
*** 15439,15445 ****
  Returns the calculated 8-bit bit-reversed CRC using the initial CRC (8-bit),
  data (8-bit) and the polynomial (8-bit).
  @var{crc} is the initial CRC, @var{data} is the data and
! @var{poly} is the polynomial without leading 1.
  Table-based or clmul-based CRC may be used for the
  calculation, depending on the target architecture.
  @enddefbuiltin
--- 15439,15445 ----
  Returns the calculated 8-bit bit-reversed CRC using the initial CRC (8-bit),
  data (8-bit) and the polynomial (8-bit).
  @var{crc} is the initial CRC, @var{data} is the data and
! @var{poly} is the polynomial without leading 1. @var{poly} is required to be a compile-time constant.
  Table-based or clmul-based CRC may be used for the
  calculation, depending on the target architecture.
  @enddefbuiltin
*************** is 32-bit.
*** 15494,15500 ****
  Returns the calculated 8-bit bit-forward CRC using the initial CRC (8-bit),
  data (8-bit) and the polynomial (8-bit).
  @var{crc} is the initial CRC, @var{data} is the data and
! @var{poly} is the polynomial without leading 1.
  Table-based or clmul-based CRC may be used for the
  calculation, depending on the target architecture.
  @enddefbuiltin
--- 15494,15500 ----
  Returns the calculated 8-bit bit-forward CRC using the initial CRC (8-bit),
  data (8-bit) and the polynomial (8-bit).
  @var{crc} is the initial CRC, @var{data} is the data and
! @var{poly} is the polynomial without leading 1. @var{poly} is required to be a compile-time constant.
  Table-based or clmul-based CRC may be used for the
  calculation, depending on the target architecture.
  @enddefbuiltin
diff -Nrcpad gcc-15-20250712/gcc/doc/invoke.texi gcc-15-20250719/gcc/doc/invoke.texi
*** gcc-15-20250712/gcc/doc/invoke.texi	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/doc/invoke.texi	Sat Jul 19 22:32:15 2025
*************** Intel Panther Lake CPU with 64-bit exten
*** 35181,35189 ****
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
  XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
  MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
! VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI, UINTR, AVXIFMA,
! AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4 and
! PREFETCHI instruction set support.
  
  @item sapphirerapids
  @itemx emeraldrapids
--- 35181,35189 ----
  SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC,
  XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI,
  MOVDIR64B, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU,
! VAES, VPCLMULQDQ, SERIALIZE, HRESET, AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8,
! AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4 and PREFETCHI
! instruction set support.
  
  @item sapphirerapids
  @itemx emeraldrapids
*************** Intel Clearwater Forest CPU with 64-bit
*** 35286,35294 ****
  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,
! ENQCMD, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16,
! SHA512, SM3, SM4, USER_MSR and PREFETCHI instruction set support.
  
  @item k6
  AMD K6 CPU with MMX instruction set support.
--- 35286,35294 ----
  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, AVX-VNNI, ENQCMD,
! UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512,
! SM3, SM4, USER_MSR and PREFETCHI instruction set support.
  
  @item k6
  AMD K6 CPU with MMX instruction set support.
diff -Nrcpad gcc-15-20250712/gcc/ext-dce.cc gcc-15-20250719/gcc/ext-dce.cc
*** gcc-15-20250712/gcc/ext-dce.cc	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/ext-dce.cc	Sat Jul 19 22:32:15 2025
*************** ext_dce_process_uses (rtx_insn *insn, rt
*** 760,778 ****
  		    y = XEXP (y, 0);
  		  else if (SUBREG_P (y) && SUBREG_BYTE (y).is_constant ())
  		    {
! 		      /* We really want to know the outer code here, ie do we
! 			 have (ANY_EXTEND (SUBREG ...)) as we need to know if
! 			 the extension matches the SUBREG_PROMOTED state.  In
! 			 that case optimizers can turn the extension into a
! 			 simple copy.  Which means that bits outside the
! 			 SUBREG's mode are actually live.
! 
! 			 We don't want to mark those bits live unnecessarily
! 			 as that inhibits extension elimination in important
! 			 cases such as those in Coremark.  So we need that
! 			 outer code.
! 
! 			 But if !TRULY_NOOP_TRUNCATION_MODES_P, the mode
  			 change performed by Y would normally need to be a
  			 TRUNCATE rather than a SUBREG.  It is probably the
  			 guarantee provided by SUBREG_PROMOTED_VAR_P that
--- 760,766 ----
  		    y = XEXP (y, 0);
  		  else if (SUBREG_P (y) && SUBREG_BYTE (y).is_constant ())
  		    {
! 		      /* If !TRULY_NOOP_TRUNCATION_MODES_P, the mode
  			 change performed by Y would normally need to be a
  			 TRUNCATE rather than a SUBREG.  It is probably the
  			 guarantee provided by SUBREG_PROMOTED_VAR_P that
*************** ext_dce_process_uses (rtx_insn *insn, rt
*** 782,794 ****
  			 regardless of the outer code.  See PR 120050.  */
  		      if (!REG_P (SUBREG_REG (y))
  			  || (SUBREG_PROMOTED_VAR_P (y)
! 			      && ((GET_CODE (SET_SRC (x)) == SIGN_EXTEND
! 				   && SUBREG_PROMOTED_SIGNED_P (y))
! 				  || (GET_CODE (SET_SRC (x)) == ZERO_EXTEND
! 				      && SUBREG_PROMOTED_UNSIGNED_P (y))
! 				  || !TRULY_NOOP_TRUNCATION_MODES_P (
! 					GET_MODE (y),
! 					GET_MODE (SUBREG_REG (y))))))
  			break;
  
  		      bit = subreg_lsb (y).to_constant ();
--- 770,778 ----
  			 regardless of the outer code.  See PR 120050.  */
  		      if (!REG_P (SUBREG_REG (y))
  			  || (SUBREG_PROMOTED_VAR_P (y)
! 			      && (!TRULY_NOOP_TRUNCATION_MODES_P (
! 				    GET_MODE (y),
! 				    GET_MODE (SUBREG_REG (y))))))
  			break;
  
  		      bit = subreg_lsb (y).to_constant ();
*************** maybe_clear_subreg_promoted_p (void)
*** 992,997 ****
--- 976,1056 ----
      }
  }
  
+ /* Walk the IL and build the transitive closure of all the REGs tied
+    together by copies where either the source or destination is
+    marked in CHANGED_PSEUDOS.  */
+ 
+ static void
+ expand_changed_pseudos (void)
+ {
+   /* Build a vector of registers related by a copy.  This is meant to
+      speed up the next step by avoiding full IL walks.  */
+   struct copy_pair { rtx first; rtx second; };
+   auto_vec<copy_pair> pairs;
+   for (rtx_insn *insn = get_insns(); insn; insn = NEXT_INSN (insn))
+     {
+       if (!NONDEBUG_INSN_P (insn))
+ 	continue;
+ 
+       rtx pat = PATTERN (insn);
+ 
+       /* Simple copies to a REG from another REG or SUBREG of a REG.  */
+       if (GET_CODE (pat) == SET
+ 	  && REG_P (SET_DEST (pat))
+ 	  && (REG_P (SET_SRC (pat))
+ 	      || (SUBREG_P (SET_SRC (pat))
+ 		  && REG_P (SUBREG_REG (SET_SRC (pat))))))
+ 	{
+ 	  rtx src = (REG_P (SET_SRC (pat))
+ 		     ? SET_SRC (pat)
+ 		     : SUBREG_REG (SET_SRC (pat)));
+ 	  pairs.safe_push ({ SET_DEST (pat), src });
+ 	}
+ 
+       /* Simple copies to a REG from another REG or SUBREG of a REG
+ 	 held inside a PARALLEL.  */
+       if (GET_CODE (pat) == PARALLEL)
+ 	{
+ 	  for (int i = XVECLEN (pat, 0) - 1; i >= 0; i--)
+ 	    {
+ 	      rtx elem = XVECEXP (pat, 0, i);
+ 
+ 	      if (GET_CODE (elem) == SET
+ 		  && REG_P (SET_DEST (elem))
+ 		  && (REG_P (SET_SRC (elem))
+ 		      || (SUBREG_P (SET_SRC (elem))
+ 			  && REG_P (SUBREG_REG (SET_SRC (elem))))))
+ 		{
+ 		  rtx src = (REG_P (SET_SRC (elem))
+ 			     ? SET_SRC (elem)
+ 			     : SUBREG_REG (SET_SRC (elem)));
+ 		  pairs.safe_push ({ SET_DEST (elem), src });
+ 		}
+ 	    }
+ 	  continue;
+ 	}
+     }
+ 
+   /* Now we have a vector with copy pairs.  Iterate over that list
+      updating CHANGED_PSEUDOS as we go.  Eliminate copies from the
+      list as we go as they don't need further processing.  */
+   bool changed = true;
+   while (changed)
+     {
+       changed = false;
+       unsigned int i;
+       copy_pair *p;
+       FOR_EACH_VEC_ELT (pairs, i, p)
+ 	{
+ 	  if (bitmap_bit_p (changed_pseudos, REGNO (p->second))
+ 	      && bitmap_set_bit (changed_pseudos, REGNO (p->first)))
+ 	    {
+ 	      pairs.unordered_remove (i);
+ 	      changed = true;
+ 	    }
+ 	}
+     }
+ }
  
  /* We optimize away sign/zero extensions in this pass and replace
     them with SUBREGs indicating certain bits are don't cares.
*************** maybe_clear_subreg_promoted_p (void)
*** 1004,1009 ****
--- 1063,1081 ----
  static void
  reset_subreg_promoted_p (void)
  {
+   /* This pass eliminates zero/sign extensions on pseudo regs found
+      in CHANGED_PSEUDOS.  Elimination of those extensions changes if
+      the pseudos are known to hold values extended to wider modes
+      via SUBREG_PROMOTED_VAR.  So we wipe the SUBREG_PROMOTED_VAR
+      state on all affected pseudos.
+ 
+      But that is insufficient.  We might have a copy from one REG
+      to another (possibly with the source register wrapped with a
+      SUBREG).  We need to wipe SUBREG_PROMOTED_VAR on the transitive
+      closure of the original CHANGED_PSEUDOS and registers they're
+      connected to via copies.  So expand the set.  */
+   expand_changed_pseudos ();
+     
    /* If we removed an extension, that changed the promoted state
       of the destination of that extension.  Thus we need to go
       find any SUBREGs that reference that pseudo and adjust their
diff -Nrcpad gcc-15-20250712/gcc/fortran/ChangeLog gcc-15-20250719/gcc/fortran/ChangeLog
*** gcc-15-20250712/gcc/fortran/ChangeLog	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/fortran/ChangeLog	Sat Jul 19 22:32:15 2025
***************
*** 1,3 ****
--- 1,30 ----
+ 2025-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/121060
+ 	* interface.cc (matching_typebound_op): Defer determination of
+ 	specific procedure until resolution by returning NULL.
+ 
+ 2025-07-15  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-07-15  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 
+ 	PR fortran/104428
+ 	* trans-openmp.cc (gfc_trans_omp_declare_variant): Check that proc_st
+ 	is non-NULL before dereferencing.  Add line number to error message.
+ 
+ 2025-07-15  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-07-08  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	PR fortran/120637
+ 	* class.cc (finalize_component): Return true, when a finalizable
+ 	component was detect and do not free it.
+ 
  2025-07-09  Andre Vehreschild  <vehre@gcc.gnu.org>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250712/gcc/fortran/class.cc gcc-15-20250719/gcc/fortran/class.cc
*** gcc-15-20250712/gcc/fortran/class.cc	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/fortran/class.cc	Sat Jul 19 22:32:15 2025
*************** comp_is_finalizable (gfc_component *comp
*** 1034,1040 ****
     of calling the appropriate finalizers, coarray deregistering, and
     deallocation of allocatable subcomponents.  */
  
! static void
  finalize_component (gfc_expr *expr, gfc_symbol *derived, gfc_component *comp,
  		    gfc_symbol *stat, gfc_symbol *fini_coarray, gfc_code **code,
  		    gfc_namespace *sub_ns)
--- 1034,1040 ----
     of calling the appropriate finalizers, coarray deregistering, and
     deallocation of allocatable subcomponents.  */
  
! static bool
  finalize_component (gfc_expr *expr, gfc_symbol *derived, gfc_component *comp,
  		    gfc_symbol *stat, gfc_symbol *fini_coarray, gfc_code **code,
  		    gfc_namespace *sub_ns)
*************** finalize_component (gfc_expr *expr, gfc_
*** 1044,1057 ****
    gfc_was_finalized *f;
  
    if (!comp_is_finalizable (comp))
!     return;
  
    /* If this expression with this component has been finalized
       already in this namespace, there is nothing to do.  */
    for (f = sub_ns->was_finalized; f; f = f->next)
      {
        if (f->e == expr && f->c == comp)
! 	return;
      }
  
    e = gfc_copy_expr (expr);
--- 1044,1057 ----
    gfc_was_finalized *f;
  
    if (!comp_is_finalizable (comp))
!     return false;
  
    /* If this expression with this component has been finalized
       already in this namespace, there is nothing to do.  */
    for (f = sub_ns->was_finalized; f; f = f->next)
      {
        if (f->e == expr && f->c == comp)
! 	return false;
      }
  
    e = gfc_copy_expr (expr);
*************** finalize_component (gfc_expr *expr, gfc_
*** 1208,1215 ****
        final_wrap->ext.actual->next->next = gfc_get_actual_arglist ();
        final_wrap->ext.actual->next->next->expr = fini_coarray_expr;
  
- 
- 
        if (*code)
  	{
  	  (*code)->next = final_wrap;
--- 1208,1213 ----
*************** finalize_component (gfc_expr *expr, gfc_
*** 1221,1231 ****
    else
      {
        gfc_component *c;
  
        for (c = comp->ts.u.derived->components; c; c = c->next)
! 	finalize_component (e, comp->ts.u.derived, c, stat, fini_coarray, code,
! 			    sub_ns);
!       gfc_free_expr (e);
      }
  
    /* Record that this was finalized already in this namespace.  */
--- 1219,1232 ----
    else
      {
        gfc_component *c;
+       bool ret = false;
  
        for (c = comp->ts.u.derived->components; c; c = c->next)
! 	ret |= finalize_component (e, comp->ts.u.derived, c, stat, fini_coarray,
! 				   code, sub_ns);
!       /* Only free the expression, if it has never been used.  */
!       if (!ret)
! 	gfc_free_expr (e);
      }
  
    /* Record that this was finalized already in this namespace.  */
*************** finalize_component (gfc_expr *expr, gfc_
*** 1234,1239 ****
--- 1235,1241 ----
    sub_ns->was_finalized->e = expr;
    sub_ns->was_finalized->c = comp;
    sub_ns->was_finalized->next = f;
+   return true;
  }
  
  
*************** finish_assumed_rank:
*** 2314,2319 ****
--- 2316,2322 ----
      {
        gfc_symbol *stat;
        gfc_code *block = NULL;
+       gfc_expr *ptr_expr;
  
        if (!ptr)
  	{
*************** finish_assumed_rank:
*** 2359,2372 ****
  					     sub_ns);
        block = block->next;
  
        for (comp = derived->components; comp; comp = comp->next)
  	{
  	  if (comp == derived->components && derived->attr.extension
  	      && ancestor_wrapper && ancestor_wrapper->expr_type != EXPR_NULL)
  	    continue;
  
! 	  finalize_component (gfc_lval_expr_from_sym (ptr), derived, comp,
! 			      stat, fini_coarray, &block, sub_ns);
  	  if (!last_code->block->next)
  	    last_code->block->next = block;
  	}
--- 2362,2376 ----
  					     sub_ns);
        block = block->next;
  
+       ptr_expr = gfc_lval_expr_from_sym (ptr);
        for (comp = derived->components; comp; comp = comp->next)
  	{
  	  if (comp == derived->components && derived->attr.extension
  	      && ancestor_wrapper && ancestor_wrapper->expr_type != EXPR_NULL)
  	    continue;
  
! 	  finalize_component (ptr_expr, derived, comp, stat, fini_coarray,
! 			      &block, sub_ns);
  	  if (!last_code->block->next)
  	    last_code->block->next = block;
  	}
diff -Nrcpad gcc-15-20250712/gcc/fortran/interface.cc gcc-15-20250719/gcc/fortran/interface.cc
*** gcc-15-20250712/gcc/fortran/interface.cc	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/fortran/interface.cc	Sat Jul 19 22:32:15 2025
*************** matching_typebound_op (gfc_expr** tb_bas
*** 4781,4786 ****
--- 4781,4793 ----
  		gfc_actual_arglist* argcopy;
  		bool matches;
  
+ 		/* If expression matching comes here during parsing, eg. when
+ 		   parsing ASSOCIATE, generic TBPs have not yet been resolved
+ 		   and g->specific will not have been set. Wait for expression
+ 		   resolution by returning NULL.  */
+ 		if (!g->specific && !gfc_current_ns->resolved)
+ 		  return NULL;
+ 
  		gcc_assert (g->specific);
  		if (g->specific->error)
  		  continue;
diff -Nrcpad gcc-15-20250712/gcc/fortran/trans-openmp.cc gcc-15-20250719/gcc/fortran/trans-openmp.cc
*** gcc-15-20250712/gcc/fortran/trans-openmp.cc	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/fortran/trans-openmp.cc	Sat Jul 19 22:32:15 2025
*************** gfc_trans_omp_declare_variant (gfc_names
*** 9703,9713 ****
  	{
  	  gfc_symtree *proc_st;
  	  gfc_find_sym_tree (variant_proc_name, gfc_current_ns, 1, &proc_st);
! 	  variant_proc_sym = proc_st->n.sym;
  	}
        if (variant_proc_sym == NULL)
  	{
! 	  gfc_error ("Cannot find symbol %qs", variant_proc_name);
  	  continue;
  	}
        set_selectors = omp_check_context_selector
--- 9703,9714 ----
  	{
  	  gfc_symtree *proc_st;
  	  gfc_find_sym_tree (variant_proc_name, gfc_current_ns, 1, &proc_st);
! 	  variant_proc_sym = proc_st ? proc_st->n.sym : NULL;
  	}
        if (variant_proc_sym == NULL)
  	{
! 	  gfc_error ("Cannot find symbol %qs at %L", variant_proc_name,
! 						     &odv->where);
  	  continue;
  	}
        set_selectors = omp_check_context_selector
diff -Nrcpad gcc-15-20250712/gcc/gimple-fold.cc gcc-15-20250719/gcc/gimple-fold.cc
*** gcc-15-20250712/gcc/gimple-fold.cc	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/gimple-fold.cc	Sat Jul 19 22:32:15 2025
*************** fold_nonarray_ctor_reference (tree type,
*** 9978,9987 ****
  	    {
  	      if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN)
  		return NULL_TREE;
- 	      const unsigned int encoding_size
- 		= GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (cfield)));
  	      if (BYTES_BIG_ENDIAN)
! 		inner_offset += encoding_size - wi::to_offset (field_size);
  	    }
  
  	  return fold_ctor_reference (type, cval,
--- 9978,9994 ----
  	    {
  	      if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN)
  		return NULL_TREE;
  	      if (BYTES_BIG_ENDIAN)
! 		{
! 		  tree ctype = TREE_TYPE (cfield);
! 		  unsigned int encoding_size;
! 		  if (TYPE_MODE (ctype) != BLKmode)
! 		    encoding_size
! 		      = GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (ctype));
! 		  else
! 		    encoding_size = TREE_INT_CST_LOW (TYPE_SIZE (ctype));
! 		  inner_offset += encoding_size - wi::to_offset (field_size);
! 		}
  	    }
  
  	  return fold_ctor_reference (type, cval,
diff -Nrcpad gcc-15-20250712/gcc/internal-fn.cc gcc-15-20250719/gcc/internal-fn.cc
*** gcc-15-20250712/gcc/internal-fn.cc	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/internal-fn.cc	Sat Jul 19 22:32:15 2025
*************** expand_crc_optab_fn (internal_fn fn, gca
*** 4024,4032 ****
    rtx dest = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
    rtx crc = expand_normal (rhs1);
    rtx data = expand_normal (rhs2);
!   gcc_assert (TREE_CODE (rhs3) == INTEGER_CST);
!   rtx polynomial = gen_rtx_CONST_INT (TYPE_MODE (result_type),
! 				      TREE_INT_CST_LOW (rhs3));
  
    /* Use target specific expansion if it exists.
       Otherwise, generate table-based CRC.  */
--- 4024,4037 ----
    rtx dest = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
    rtx crc = expand_normal (rhs1);
    rtx data = expand_normal (rhs2);
!   rtx polynomial;
!   if (TREE_CODE (rhs3) != INTEGER_CST)
!     {
!       error ("third argument to %<crc%> builtins must be a constant");
!       polynomial = const0_rtx;
!     }
!   else
!     polynomial = convert_to_mode (TYPE_MODE (result_type), expand_normal (rhs3), 0);
  
    /* Use target specific expansion if it exists.
       Otherwise, generate table-based CRC.  */
*************** widening_fn_p (code_helper code)
*** 4530,4535 ****
--- 4535,4567 ----
      case IFN_##NAME##_EVEN:					  \
      case IFN_##NAME##_ODD:					  \
        return true;
+     #include "internal-fn.def"
+ 
+     default:
+       return false;
+     }
+ }
+ 
+ /* Return true if this CODE describes an internal_fn that returns a vector with
+    elements twice as wide as the element size of the input vectors and operates
+    on even/odd parts of the input.  */
+ 
+ bool
+ widening_evenodd_fn_p (code_helper code)
+ {
+   if (!code.is_fn_code ())
+     return false;
+ 
+   if (!internal_fn_p ((combined_fn) code))
+     return false;
+ 
+   internal_fn fn = as_internal_fn ((combined_fn) code);
+   switch (fn)
+     {
+     #define DEF_INTERNAL_WIDENING_OPTAB_FN(NAME, F, S, SO, UO, T) \
+     case IFN_##NAME##_EVEN:					  \
+     case IFN_##NAME##_ODD:					  \
+       return true;
      #include "internal-fn.def"
  
      default:
diff -Nrcpad gcc-15-20250712/gcc/internal-fn.h gcc-15-20250719/gcc/internal-fn.h
*** gcc-15-20250712/gcc/internal-fn.h	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/internal-fn.h	Sat Jul 19 22:32:15 2025
*************** extern bool commutative_ternary_fn_p (in
*** 219,224 ****
--- 219,225 ----
  extern int first_commutative_argument (internal_fn);
  extern bool associative_binary_fn_p (internal_fn);
  extern bool widening_fn_p (code_helper);
+ extern bool widening_evenodd_fn_p (code_helper);
  
  extern bool set_edom_supported_p (void);
  
diff -Nrcpad gcc-15-20250712/gcc/m2/ChangeLog gcc-15-20250719/gcc/m2/ChangeLog
*** gcc-15-20250712/gcc/m2/ChangeLog	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/ChangeLog	Sat Jul 19 22:32:15 2025
***************
*** 1,3 ****
--- 1,265 ----
+ 2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/121164
+ 	* gm2-libs/ARRAYOFCHAR.mod (Write): Rename 2nd parameter
+ 	name a to str.
+ 
+ 2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-01  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120912
+ 	* gm2-libs-iso/IOChanUtils.def (GetFile): New procedure function.
+ 	* gm2-libs-iso/IOChanUtils.mod (GetFile): New procedure function.
+ 
+ 2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-29  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/117203
+ 	* gm2-libs-log/FileSystem.def (GetFileName): New
+ 	procedure function.
+ 	(WriteString): New procedure.
+ 	* gm2-libs-log/FileSystem.mod (GetFileName): New
+ 	procedure function.
+ 	(WriteString): New procedure.
+ 	* gm2-libs/SFIO.def (GetFileName): New procedure function.
+ 	* gm2-libs/SFIO.mod (GetFileName): New procedure function.
+ 	* gm2-libs-iso/IOChanUtils.def: New file.
+ 	* gm2-libs-iso/IOChanUtils.mod: New file.
+ 
+ 2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-22  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120731
+ 	* gm2-libs-log/Strings.def (Delete): Rewrite comment.
+ 	* gm2-libs-log/Strings.mod (Pos): Rewrite.
+ 	(PosLower): New procedure function.
+ 
+ 2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-21  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	* gm2-compiler/M2GCCDeclare.mod (StartDeclareModuleScopeSeparate):
+ 	Reformat statement comments.
+ 	(StartDeclareModuleScopeWholeProgram): Ditto.
+ 
+ 2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120673
+ 	* gm2-compiler/M2GCCDeclare.mod (ErrorDepList): New
+ 	global variable set containing every errant dependency symbol.
+ 	(mystop): Remove.
+ 	(EmitCircularDependancyError): Replace with ...
+ 	(EmitCircularDependencyError): ... this.
+ 	(AssertAllTypesDeclared): Rewrite.
+ 	(DoVariableDeclaration): Ditto.
+ 	(TypeDependentsDeclared): New procedure function.
+ 	(PrepareGCCVarDeclaration): Ditto.
+ 	(DeclareVariable): Remove assert.
+ 	(DeclareLocalVariable): Ditto.
+ 	(Constructor): Initialize ErrorDepList.
+ 	* gm2-compiler/M2MetaError.mod (doErrorScopeProc): Rewrite
+ 	and ensure that a symbol with a module scope does not lookup
+ 	from a definition module.
+ 	* gm2-compiler/P2SymBuild.mod (BuildType): Rewrite so that
+ 	a synonym type is created using the token refering to the name
+ 	on the lhs.
+ 
+ 2025-07-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-12  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/119650
+ 	* gm2-libs/ARRAYOFCHAR.def: Remove comment about non
+ 	existent read.
+ 	* target-independent/m2/Builtins.texi: Regenerate.
+ 	* target-independent/m2/SYSTEM-iso.texi: Ditto.
+ 	* target-independent/m2/SYSTEM-pim.texi: Ditto.
+ 	* target-independent/m2/gm2-libs.texi: Ditto.
+ 
+ 2025-07-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-09  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120606
+ 	* gm2-compiler/M2Quads.mod (ForLoopLastIterator): Dereference
+ 	start and end expressions e1 and e2 respectively.
+ 
+ 2025-07-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-07  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/119650
+ 	PR modula2/117203
+ 	* gm2-compiler/P2Build.bnf (CheckModuleQualident): New
+ 	procedure.
+ 	(Qualident): Rewrite.
+ 	* gm2-compiler/P3Build.bnf (PushTFQualident): New procedure.
+ 	(CheckModuleQualident): Ditto.
+ 	(Qualident): Rewrite.
+ 	* gm2-compiler/PCBuild.bnf (PushTFQualident): New procedure.
+ 	(CheckModuleQualident): Ditto.
+ 	(Qualident): Rewrite.
+ 	* gm2-compiler/PHBuild.bnf (PushTFQualident): New procedure.
+ 	(CheckModuleQualident): Ditto.
+ 	(Qualident): Rewrite.
+ 	* gm2-libs/ARRAYOFCHAR.def: New file.
+ 	* gm2-libs/ARRAYOFCHAR.mod: New file.
+ 	* gm2-libs/CFileSysOp.def: New file.
+ 	* gm2-libs/CHAR.def: New file.
+ 	* gm2-libs/CHAR.mod: New file.
+ 	* gm2-libs/FileSysOp.def: New file.
+ 	* gm2-libs/FileSysOp.mod: New file.
+ 	* gm2-libs/String.def: New file.
+ 	* gm2-libs/String.mod: New file.
+ 	* gm2-libs/StringFileSysOp.def: New file.
+ 	* gm2-libs/StringFileSysOp.mod: New file.
+ 
+ 2025-07-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-06  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120542
+ 	* gm2-compiler/M2Quads.mod (BuildReturnLower): New procedure.
+ 	(BuildReturn): Allow return without an expression from
+ 	module initialization blocks.  Generate an error if an
+ 	expression is provided.  Call BuildReturnLower if no error
+ 	was seen.
+ 
+ 2025-07-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-01  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120474
+ 	* gm2-libs-log/InOut.mod (LocalWrite): Call FIO.FlushBuffer.
+ 
+ 2025-07-16  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-01  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120497
+ 	* gm2-compiler/M2Range.mod (IsAssignmentCompatible): Remove from
+ 	import list.
+ 	(FoldTypeReturnFunc): Rewrite to skip the Lvalue of a var
+ 	variable.
+ 	(CodeTypeReturnFunc): Ditto.
+ 	(CodeTypeIndrX): Call AssignmentTypeCompatible rather than
+ 	IsAssignmentCompatible.
+ 	(FoldTypeIndrX): Ditto.
+ 
+ 2025-07-16  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-31  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120389
+ 	* gm2-compiler/M2Check.def (AssignmentTypeCompatible): Add new
+ 	parameter enableReason.
+ 	* gm2-compiler/M2Check.mod (EquivalenceProcedure): New type.
+ 	(falseReason2): New procedure function.
+ 	(falseReason1): Ditto.
+ 	(falseReason0): Ditto.
+ 	(checkTypeEquivalence): Rewrite.
+ 	(checkUnboundedArray): Ditto.
+ 	(checkUnbounded): Ditto.
+ 	(checkArrayTypeEquivalence): Ditto.
+ 	(checkCharStringTypeEquivalence): Ditto.
+ 	(buildError4): Add false reason.
+ 	(buildError2): Ditto.
+ 	(IsTyped): Use GetDType.
+ 	(IsTypeEquivalence): New procedure function.
+ 	(checkVarTypeEquivalence): Ditto.
+ 	(checkVarEquivalence ): Rewrite.
+ 	(checkConstMeta): Ditto.
+ 	(checkEnumField): New procedure function.
+ 	(checkEnumFieldEquivalence): Ditto.
+ 	(checkSubrangeTypeEquivalence): Rewrite.
+ 	(checkSystemEquivalence): Ditto.
+ 	(checkTypeKindViolation): Ditto.
+ 	(doCheckPair): Ditto.
+ 	(InitEquivalenceArray): New procedure.
+ 	(addEquivalence): Ditto.
+ 	(checkProcType): Rewrite.
+ 	(deconstruct): Deallocate reason string.
+ 	(AssignmentTypeCompatible): Initialize reason and reasonEnable
+ 	fields.
+ 	(ParameterTypeCompatible): Ditto.
+ 	(doExpressionTypeCompatible): Ditto.
+ 	* gm2-compiler/M2GenGCC.mod (CodeIndrX) Rewrite.
+ 	(CheckBinaryExpressionTypes): Rewrite and simplify now that the
+ 	type checker is more robust.
+ 	(CheckElementSetTypes): Ditto.
+ 	(CodeXIndr): Add new range assignment type check.
+ 	* gm2-compiler/M2MetaError.def: Correct comments.
+ 	* gm2-compiler/M2Options.def (SetStrictTypeAssignment): New procedure.
+ 	(SetStrictTypeReason): Ditto.
+ 	* gm2-compiler/M2Options.mod: (SetStrictTypeAssignment): New procedure.
+ 	(SetStrictTypeReason): Ditto.
+ 	(StrictTypeReason): Initialize.
+ 	(StrictTypeAssignment): Ditto.
+ 	* gm2-compiler/M2Quads.mod (CheckBreak): Delete.
+ 	(BreakQuad): New global variable.
+ 	(BreakAtQuad): Delete.
+ 	(gdbhook): New procedure.
+ 	(BreakWhenQuadCreated): Ditto.
+ 	(CheckBreak): Ditto.
+ 	(Init): Call BreakWhenQuadCreated and gdbhook.
+ 	(doBuildAssignment): Add type assignment range check.
+ 	(CheckProcTypeAndProcedure): Only check if the procedure
+ 	types differ.
+ 	(doIndrX): Add type IndrX range check.
+ 	(CheckReturnType): Add range return type check.
+ 	* gm2-compiler/M2Range.def (InitTypesIndrXCheck): New procedure
+ 	function.
+ 	(InitTypesReturnTypeCheck): Ditto.
+ 	* gm2-compiler/M2Range.mod (InitTypesIndrXCheck): New procedure
+ 	function.
+ 	(InitTypesReturnTypeCheck): Ditto.
+ 	(HandlerExists): Add new clauses.
+ 	(FoldAssignment): Pass extra FALSE parameter to
+ 	AssignmentTypeCompatible.
+ 	(FoldTypeReturnFunc): New procedure.
+ 	(FoldTypeAssign): Ditto.
+ 	(FoldTypeIndrX): Ditto.
+ 	(CodeTypeAssign): Rewrite.
+ 	(CodeTypeIndrX): New procedure.
+ 	(CodeTypeReturnFunc): Ditto.
+ 	(FoldTypeCheck): Add new case clauses.
+ 	(CodeTypeCheck): Ditto.
+ 	(FoldRangeCheckLower): Ditto.
+ 	(IssueWarning): Ditto.
+ 	* gm2-gcc/m2options.h (M2Options_SetStrictTypeAssignment): New
+ 	function prototype.
+ 	(M2Options_SetStrictTypeReason): Ditto.
+ 
+ 2025-07-15  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-22  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120389
+ 	* gm2-compiler/M2GenGCC.mod (CodeXIndr): Check to see that
+ 	the type of left is assignment compatible with the type of
+ 	right.
+ 
  2025-07-11  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/M2Check.def gcc-15-20250719/gcc/m2/gm2-compiler/M2Check.def
*** gcc-15-20250712/gcc/m2/gm2-compiler/M2Check.def	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/M2Check.def	Sat Jul 19 22:32:15 2025
*************** PROCEDURE ParameterTypeCompatible (token
*** 50,56 ****
  *)
  
  PROCEDURE AssignmentTypeCompatible (token: CARDINAL; format: ARRAY OF CHAR;
!                                     des, expr: CARDINAL) : BOOLEAN ;
  
  
  (*
--- 50,57 ----
  *)
  
  PROCEDURE AssignmentTypeCompatible (token: CARDINAL; format: ARRAY OF CHAR;
!                                     des, expr: CARDINAL;
!                                     enableReason: BOOLEAN) : BOOLEAN ;
  
  
  (*
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/M2Check.mod gcc-15-20250719/gcc/m2/gm2-compiler/M2Check.mod
*** gcc-15-20250712/gcc/m2/gm2-compiler/M2Check.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/M2Check.mod	Sat Jul 19 22:32:15 2025
*************** FROM M2System IMPORT IsSystemType, IsGen
*** 36,61 ****
  FROM M2Base IMPORT IsParameterCompatible, IsAssignmentCompatible, IsExpressionCompatible, IsComparisonCompatible, IsBaseType, IsMathType, ZType, CType, RType, IsComplexType, Char ;
  FROM Indexing IMPORT Index, InitIndex, GetIndice, PutIndice, KillIndex, HighIndice, LowIndice, IncludeIndiceIntoIndex, ForeachIndiceInIndexDo ;
  FROM M2Error IMPORT Error, InternalError, NewError, ErrorString, ChainError ;
! FROM M2MetaError IMPORT MetaErrorStringT2, MetaErrorStringT3, MetaErrorStringT4, MetaString2, MetaString3, MetaString4, MetaError1 ;
  FROM StrLib IMPORT StrEqual ;
  FROM M2Debug IMPORT Assert ;
  
! FROM SymbolTable IMPORT NulSym, IsRecord, IsSet, GetDType, GetSType, IsType,
                          SkipType, IsProcedure, NoOfParamAny, IsVarParamAny, GetNth,
                          GetNthParamAny, IsProcType, IsVar, IsEnumeration, IsArray,
                          IsSubrange, GetArraySubscript, IsConst,
                          IsReallyPointer, IsPointer, IsParameter, ModeOfAddr,
!                         GetMode, GetType, IsUnbounded, IsComposite, IsConstructor,
                          IsParameter, IsConstString, IsConstLitInternal, IsConstLit,
                          GetStringLength, GetProcedureProcType, IsHiddenType,
!                         IsHiddenReallyPointer, GetDimension ;
  
  FROM M2GCCDeclare IMPORT GetTypeMin, GetTypeMax ;
  FROM M2System IMPORT Address ;
  FROM M2ALU IMPORT Equ, PushIntegerTree ;
  FROM m2expr IMPORT AreConstantsEqual ;
! FROM SymbolConversion IMPORT Mod2Gcc ;
! FROM DynamicStrings IMPORT String, InitString, KillString ;
  FROM M2LexBuf IMPORT GetTokenNo ;
  FROM Storage IMPORT ALLOCATE ;
  FROM SYSTEM IMPORT ADR ;
--- 36,68 ----
  FROM M2Base IMPORT IsParameterCompatible, IsAssignmentCompatible, IsExpressionCompatible, IsComparisonCompatible, IsBaseType, IsMathType, ZType, CType, RType, IsComplexType, Char ;
  FROM Indexing IMPORT Index, InitIndex, GetIndice, PutIndice, KillIndex, HighIndice, LowIndice, IncludeIndiceIntoIndex, ForeachIndiceInIndexDo ;
  FROM M2Error IMPORT Error, InternalError, NewError, ErrorString, ChainError ;
! 
! FROM M2MetaError IMPORT MetaErrorStringT0, MetaErrorStringT2, MetaErrorStringT3,
!                         MetaErrorStringT4,
!                         MetaString0, MetaString1, MetaString2, MetaString3,
!                         MetaString4,
!                         MetaError0, MetaError1 ;
! 
  FROM StrLib IMPORT StrEqual ;
  FROM M2Debug IMPORT Assert ;
  
! FROM SymbolTable IMPORT NulSym, IsRecord, IsSet, GetDType, GetType, IsType,
                          SkipType, IsProcedure, NoOfParamAny, IsVarParamAny, GetNth,
                          GetNthParamAny, IsProcType, IsVar, IsEnumeration, IsArray,
                          IsSubrange, GetArraySubscript, IsConst,
                          IsReallyPointer, IsPointer, IsParameter, ModeOfAddr,
!                         GetMode, IsUnbounded, IsComposite, IsConstructor,
                          IsParameter, IsConstString, IsConstLitInternal, IsConstLit,
                          GetStringLength, GetProcedureProcType, IsHiddenType,
!                         IsHiddenReallyPointer, GetDimension, IsFieldEnumeration ;
  
  FROM M2GCCDeclare IMPORT GetTypeMin, GetTypeMax ;
  FROM M2System IMPORT Address ;
  FROM M2ALU IMPORT Equ, PushIntegerTree ;
+ FROM M2Options IMPORT StrictTypeReason ;
  FROM m2expr IMPORT AreConstantsEqual ;
! FROM SymbolConversion IMPORT Mod2Gcc, GccKnowsAbout ;
! FROM DynamicStrings IMPORT String, InitString, KillString, ConCat, Mark ;
  FROM M2LexBuf IMPORT GetTokenNo ;
  FROM Storage IMPORT ALLOCATE ;
  FROM SYSTEM IMPORT ADR ;
*************** FROM libc IMPORT printf ;
*** 63,69 ****
  
  
  CONST
!    debugging = FALSE ;
  
  TYPE
     errorSig = POINTER TO RECORD
--- 70,77 ----
  
  
  CONST
!    debugging     = FALSE ;
!    MaxEquvalence = 20 ;
  
  TYPE
     errorSig = POINTER TO RECORD
*************** TYPE
*** 83,88 ****
--- 91,98 ----
     checkType = (parameter, assignment, expression) ;
  
     tInfo = POINTER TO RECORD
+                          reasonEnable: BOOLEAN ;
+                          reason,
                           format    : String ;
                           kind      : checkType ;
                           token,
*************** TYPE
*** 105,115 ****
  
     status = (true, false, unknown, visited, unused) ;
  
  
  VAR
!    pairFreeList : pair ;
!    tinfoFreeList: tInfo ;
!    errors       : Index ;
  
  
  (*
--- 115,128 ----
  
     status = (true, false, unknown, visited, unused) ;
  
+    EquivalenceProcedure = PROCEDURE (status, tInfo, CARDINAL, CARDINAL) : status ;
  
  VAR
!    pairFreeList   : pair ;
!    tinfoFreeList  : tInfo ;
!    errors         : Index ;
!    HighEquivalence: CARDINAL ;
!    Equivalence    : ARRAY [1..MaxEquvalence] OF EquivalenceProcedure ;
  
  
  (*
*************** END dumptInfo ;
*** 159,164 ****
--- 172,224 ----
  
  
  (*
+    falseReason2 - return false.  It also stores the message as the
+                   reason for the false value.
+ *)
+ 
+ PROCEDURE falseReason2 (message: ARRAY OF CHAR; tinfo: tInfo;
+                         left, right: CARDINAL) : status ;
+ BEGIN
+    IF tinfo^.reasonEnable AND (tinfo^.reason = NIL)
+    THEN
+       tinfo^.reason := MetaString2 (InitString (message), left, right)
+    END ;
+    RETURN false
+ END falseReason2 ;
+ 
+ 
+ (*
+    falseReason1 - return false.  It also stores the message as the
+                   reason for the false value.
+ *)
+ 
+ PROCEDURE falseReason1 (message: ARRAY OF CHAR; tinfo: tInfo;
+                         operand: CARDINAL) : status ;
+ BEGIN
+    IF tinfo^.reasonEnable AND (tinfo^.reason = NIL)
+    THEN
+       tinfo^.reason := MetaString1 (InitString (message), operand)
+    END ;
+    RETURN false
+ END falseReason1 ;
+ 
+ 
+ (*
+    falseReason0 - return false.  It also stores the message as the
+                   reason for the false value.
+ *)
+ 
+ PROCEDURE falseReason0 (message: ARRAY OF CHAR; tinfo: tInfo) : status ;
+ BEGIN
+    IF tinfo^.reasonEnable AND (tinfo^.reason = NIL)
+    THEN
+       tinfo^.reason := MetaString0 (InitString (message))
+    END ;
+    RETURN false
+ END falseReason0 ;
+ 
+ 
+ (*
     isKnown - returns BOOLEAN:TRUE if result is status:true or status:false.
  *)
  
*************** END isFalse ;
*** 192,222 ****
     checkTypeEquivalence - returns TRUE if left and right can be skipped and found to be equal.
  *)
  
! PROCEDURE checkTypeEquivalence (result: status; left, right: CARDINAL) : status ;
! VAR
!    leftT, rightT: CARDINAL ;
  BEGIN
!    (* firstly check to see if we already have resolved this as false.  *)
!    IF isFalse (result)
     THEN
!       RETURN result
!    ELSE
!       (* check to see if we dont care about left or right.  *)
!       IF (left = NulSym) OR (right = NulSym)
        THEN
           RETURN true
-       ELSE
-          leftT := SkipType (left) ;
-          rightT := SkipType (right) ;
-          IF leftT = rightT
-          THEN
-             RETURN true
-          ELSIF IsType (leftT) AND IsType (rightT)
-          THEN
-             (* the fundamental types are definitely different.  *)
-             RETURN false
-          END
        END
     END ;
     RETURN result
  END checkTypeEquivalence ;
--- 252,280 ----
     checkTypeEquivalence - returns TRUE if left and right can be skipped and found to be equal.
  *)
  
! PROCEDURE checkTypeEquivalence (result: status;
!                                 tinfo: tInfo;
!                                 left, right: CARDINAL) : status ;
  BEGIN
!    IF left = right
     THEN
!       RETURN true
!    ELSIF IsType (left) AND IsType (right)
!    THEN
!       IF IsHiddenType (left) AND IsHiddenType (right)
!       THEN
!          RETURN falseReason2 ('opaque types {%1a} {%2a} differ', tinfo, left, right)
!       ELSIF (IsHiddenType (left) AND (right = Address)) OR
!             (IsHiddenType (right) AND (left = Address))
        THEN
           RETURN true
        END
+    ELSIF IsTypeEquivalence (left)
+    THEN
+       RETURN checkPair (result, tinfo, GetDType (left), right)
+    ELSIF IsTypeEquivalence (right)
+    THEN
+       RETURN checkPair (result, tinfo, left, GetDType (right))
     END ;
     RETURN result
  END checkTypeEquivalence ;
*************** BEGIN
*** 246,258 ****
        PushIntegerTree (Mod2Gcc (rLow)) ;
        IF NOT Equ (tinfo^.token)
        THEN
!          RETURN false
        END ;
        PushIntegerTree (Mod2Gcc (lHigh)) ;
        PushIntegerTree (Mod2Gcc (rHigh)) ;
        IF NOT Equ (tinfo^.token)
        THEN
!          RETURN false
        END
     END ;
     RETURN true
--- 304,318 ----
        PushIntegerTree (Mod2Gcc (rLow)) ;
        IF NOT Equ (tinfo^.token)
        THEN
!          RETURN falseReason2 ('low values of the subrange types {%1a} {%2a} differ',
!                               tinfo, left, right)
        END ;
        PushIntegerTree (Mod2Gcc (lHigh)) ;
        PushIntegerTree (Mod2Gcc (rHigh)) ;
        IF NOT Equ (tinfo^.token)
        THEN
!          RETURN falseReason2 ('high values of the subrange types {%1a} {%2a} differ',
!                               tinfo, left, right)
        END
     END ;
     RETURN true
*************** END checkSubrange ;
*** 266,271 ****
--- 326,332 ----
  *)
  
  PROCEDURE checkUnboundedArray (result: status;
+                                tinfo: tInfo;
                                 unbounded, array: CARDINAL) : status ;
  VAR
     dim   : CARDINAL ;
*************** BEGIN
*** 280,292 ****
        Assert (IsUnbounded (unbounded)) ;
        Assert (IsArray (array)) ;
        dim := GetDimension (unbounded) ;
!       ubtype := GetType (unbounded) ;
        type := array ;
        REPEAT
!          type := GetType (type) ;
           DEC (dim) ;
           (* Check type equivalences.  *)
!          IF checkTypeEquivalence (result, type, ubtype) = true
           THEN
              RETURN true
           END ;
--- 341,353 ----
        Assert (IsUnbounded (unbounded)) ;
        Assert (IsArray (array)) ;
        dim := GetDimension (unbounded) ;
!       ubtype := GetDType (unbounded) ;
        type := array ;
        REPEAT
!          type := GetDType (type) ;
           DEC (dim) ;
           (* Check type equivalences.  *)
!          IF checkTypeEquivalence (result, tinfo, type, ubtype) = true
           THEN
              RETURN true
           END ;
*************** BEGIN
*** 294,304 ****
           (* If we have run out of dimensions we conclude false.  *)
           IF dim = 0
           THEN
!             RETURN false
           END ;
        UNTIL NOT IsArray (type)
     END ;
!    RETURN false
  END checkUnboundedArray ;
  
  
--- 355,367 ----
           (* If we have run out of dimensions we conclude false.  *)
           IF dim = 0
           THEN
!             RETURN falseReason0 ('unbounded array has less dimensions than the array',
!                                  tinfo)
           END ;
        UNTIL NOT IsArray (type)
     END ;
!    RETURN falseReason0 ('array has less dimensions than the unbounded array',
!                         tinfo)
  END checkUnboundedArray ;
  
  
*************** BEGIN
*** 327,340 ****
           referenced.  We use GetDimension for 'bar' which is 2.  *)
        IF GetDimension (formal) # GetDimension (tinfo^.actual)
        THEN
!          RETURN false
        END ;
!       IF checkTypeEquivalence (result, GetType (formal), GetType (actual)) = true
        THEN
           RETURN true
        END
     END ;
!    RETURN false
  END checkUnboundedUnbounded ;
  
  
--- 390,407 ----
           referenced.  We use GetDimension for 'bar' which is 2.  *)
        IF GetDimension (formal) # GetDimension (tinfo^.actual)
        THEN
!          RETURN falseReason2 ('the formal parameter unbounded array {%1a} has a different number' +
!                               '  of dimensions to the actual parameter unbounded array {%2a}',
!                               tinfo, formal, actual)
        END ;
!       IF checkTypeEquivalence (result, tinfo, GetType (formal), GetType (actual)) = true
        THEN
           RETURN true
        END
     END ;
!    RETURN falseReason2 ('the formal unbounded array type {%1a}' +
!                         ' and the actual unbounded array type {%2a} differ',
!                         tinfo, formal, actual)
  END checkUnboundedUnbounded ;
  
  
*************** BEGIN
*** 373,382 ****
              END
           ELSIF IsArray (right)
           THEN
!             RETURN checkUnboundedArray (result, unbounded, right)
           ELSIF IsUnbounded (right)
           THEN
              RETURN checkUnboundedUnbounded (result, tinfo, unbounded, right)
           END
        END
     END ;
--- 440,453 ----
              END
           ELSIF IsArray (right)
           THEN
!             RETURN checkUnboundedArray (result, tinfo, unbounded, right)
           ELSIF IsUnbounded (right)
           THEN
              RETURN checkUnboundedUnbounded (result, tinfo, unbounded, right)
+          ELSE
+             RETURN falseReason2 ('the formal unbounded array type {%1a}' +
+                                  ' and the actual unbounded array type {%2a} differ',
+                                  tinfo, unbounded, right)
           END
        END
     END ;
*************** BEGIN
*** 400,406 ****
     THEN
        lSub := GetArraySubscript (left) ;
        rSub := GetArraySubscript (right) ;
!       result := checkPair (result, tinfo, GetSType (left), GetSType (right)) ;
        IF (lSub # NulSym) AND (rSub # NulSym)
        THEN
           result := checkSubrange (result, tinfo, getSType (lSub), getSType (rSub))
--- 471,477 ----
     THEN
        lSub := GetArraySubscript (left) ;
        rSub := GetArraySubscript (right) ;
!       result := checkPair (result, tinfo, GetDType (left), GetDType (right)) ;
        IF (lSub # NulSym) AND (rSub # NulSym)
        THEN
           result := checkSubrange (result, tinfo, getSType (lSub), getSType (rSub))
*************** BEGIN
*** 423,453 ****
        END
     ELSIF IsArray (left) AND IsConst (right)
     THEN
!       result := checkPair (result, tinfo, GetType (left), GetType (right))
     ELSIF IsArray (right) AND IsConst (left)
     THEN
!       result := checkPair (result, tinfo, GetType (left), GetType (right))
     END ;
     RETURN result
  END checkArrayTypeEquivalence ;
  
  
  (*
!    checkGenericTypeEquivalence - check left and right for generic equivalence.
  *)
  
! PROCEDURE checkGenericTypeEquivalence (result: status; left, right: CARDINAL) : status ;
  BEGIN
     IF isFalse (result)
     THEN
        RETURN result
!    ELSIF left = right
     THEN
!       RETURN true
!    ELSE
!       RETURN result
!    END
! END checkGenericTypeEquivalence ;
  
  
  (*
--- 494,551 ----
        END
     ELSIF IsArray (left) AND IsConst (right)
     THEN
!       result := checkPair (result, tinfo, GetDType (left), GetDType (right))
     ELSIF IsArray (right) AND IsConst (left)
     THEN
!       result := checkPair (result, tinfo, GetDType (left), GetDType (right))
     END ;
     RETURN result
  END checkArrayTypeEquivalence ;
  
  
  (*
!    checkCharStringTypeEquivalence - check char and string constants for type equivalence.
  *)
  
! PROCEDURE checkCharStringTypeEquivalence (result: status; tinfo: tInfo;
!                                           left, right: CARDINAL) : status ;
  BEGIN
     IF isFalse (result)
     THEN
        RETURN result
!    ELSIF left = Char
     THEN
!       IF IsConst (right)
!       THEN
!          (* We might not know the length of the string yet, in which case we return true.  *)
!          IF IsConstString (right) AND
!             ((NOT GccKnowsAbout (right)) OR (GetStringLength (tinfo^.token, right) <= 1))
!          THEN
!             RETURN true
!          ELSE
!             RETURN falseReason2 ('the string {%2a} does not fit into a {%1a}',
!                                  tinfo, left, right)
!          END
!       ELSIF IsParameter (right)
!       THEN
!          right := GetDType (right) ;
!          IF (right = Char) OR (IsUnbounded (right) AND (SkipType (GetDType (right)) = Char))
!          THEN
!             RETURN true
!          END
!       ELSIF IsArray (right)
!       THEN
!          IF Char = SkipType (GetDType (right))
!          THEN
!             RETURN true
!          END
!       END
!    ELSIF right = Char
!    THEN
!       RETURN checkCharStringTypeEquivalence (result, tinfo, right, left)
!    END ;
!    RETURN result
! END checkCharStringTypeEquivalence ;
  
  
  (*
*************** BEGIN
*** 491,497 ****
     THEN
        IF tinfo^.error = NIL
        THEN
!          (* need to create top level error message first.  *)
           tinfo^.error := NewError (tinfo^.token) ;
           (* The parameters to MetaString4 in buildError4 must match the order
              of paramters passed to ParameterTypeCompatible.  *)
--- 589,595 ----
     THEN
        IF tinfo^.error = NIL
        THEN
!          (* We need to create top level error message first.  *)
           tinfo^.error := NewError (tinfo^.token) ;
           (* The parameters to MetaString4 in buildError4 must match the order
              of paramters passed to ParameterTypeCompatible.  *)
*************** BEGIN
*** 499,507 ****
                             tinfo^.procedure,
                             tinfo^.formal, tinfo^.actual,
                             tinfo^.nth) ;
           ErrorString (tinfo^.error, s)
        END ;
!       (* and also generate a sub error containing detail.  *)
        IF (left # tinfo^.left) OR (right # tinfo^.right)
        THEN
           MetaError1 ('formal parameter {%1EDad}', right) ;
--- 597,613 ----
                             tinfo^.procedure,
                             tinfo^.formal, tinfo^.actual,
                             tinfo^.nth) ;
+          (* Append the overall reason for the failure.  *)
+          IF tinfo^.reason # NIL
+          THEN
+             (* The string tinfo^.reason is given to the error handler.  *)
+             s := ConCat (s, Mark (InitString (" because "))) ;
+             s := ConCat (s, tinfo^.reason) ;
+             tinfo^.reason := NIL   (* Hand over deconstructing to M2MetaError.  *)
+          END ;
           ErrorString (tinfo^.error, s)
        END ;
!       (* And now also generate a sub error containing detail.  *)
        IF (left # tinfo^.left) OR (right # tinfo^.right)
        THEN
           MetaError1 ('formal parameter {%1EDad}', right) ;
*************** END buildError4 ;
*** 512,518 ****
  
  
  (*
!    buildError2 - generate a MetaString2 error.  This is called by all three kinds of errors.
  *)
  
  PROCEDURE buildError2 (tinfo: tInfo; left, right: CARDINAL) ;
--- 618,624 ----
  
  
  (*
!    buildError2 - generate a MetaString2 error.
  *)
  
  PROCEDURE buildError2 (tinfo: tInfo; left, right: CARDINAL) ;
*************** BEGIN
*** 543,548 ****
--- 649,662 ----
                                         left, right)
  
           END ;
+          (* Lastly the overall reason for the failure.  *)
+          IF tinfo^.reason # NIL
+          THEN
+             (* The string tinfo^.reason is given to the error handler.  *)
+             s := ConCat (s, Mark (InitString (" because "))) ;
+             s := ConCat (s, tinfo^.reason) ;
+             tinfo^.reason := NIL   (* Hand over deconstructing to M2MetaError.  *)
+          END ;
           ErrorString (tinfo^.error, s)
        END
     END
*************** BEGIN
*** 559,565 ****
     THEN
        RETURN true
     ELSE
!       (* check whether errors are required.  *)
        IF tinfo^.format # NIL
        THEN
           CASE tinfo^.kind OF
--- 673,679 ----
     THEN
        RETURN true
     ELSE
!       (* Check whether errors are required.  *)
        IF tinfo^.format # NIL
        THEN
           CASE tinfo^.kind OF
*************** PROCEDURE IsTyped (sym: CARDINAL) : BOOL
*** 700,710 ****
  BEGIN
     RETURN IsVar (sym) OR IsParameter (sym) OR IsConstructor (sym) OR
            (IsConst (sym) AND IsConstructor (sym)) OR IsParameter (sym) OR
!           (IsConst (sym) AND (GetType (sym) # NulSym))
  END IsTyped ;
  
  
  (*
     isLValue -
  *)
  
--- 814,834 ----
  BEGIN
     RETURN IsVar (sym) OR IsParameter (sym) OR IsConstructor (sym) OR
            (IsConst (sym) AND IsConstructor (sym)) OR IsParameter (sym) OR
!           (IsConst (sym) AND (GetDType (sym) # NulSym))
  END IsTyped ;
  
  
  (*
+    IsTypeEquivalence - returns TRUE if sym is a type equivalence symbol.
+ *)
+ 
+ PROCEDURE IsTypeEquivalence (sym: CARDINAL) : BOOLEAN ;
+ BEGIN
+    RETURN IsType (sym) AND (GetDType (sym) # NulSym) AND (GetDType (sym) # sym)
+ END IsTypeEquivalence ;
+ 
+ 
+ (*
     isLValue -
  *)
  
*************** END isLValue ;
*** 715,720 ****
--- 839,876 ----
  
  
  (*
+    checkVarTypeEquivalence -
+ *)
+ 
+ PROCEDURE checkVarTypeEquivalence (result: status; tinfo: tInfo;
+                                    left, right: CARDINAL) : status ;
+ BEGIN
+    IF isFalse (result)
+    THEN
+       RETURN result
+    ELSIF (left = NulSym) OR (right = NulSym)
+    THEN
+       RETURN true
+    ELSE
+       IF IsVar (left) OR IsVar (right)
+       THEN
+          (* Either left or right will change, so we can call doCheckPair.  *)
+          IF IsVar (left)
+          THEN
+             left := getType (left)
+          END ;
+          IF IsVar (right)
+          THEN
+             right := getType (right)
+          END ;
+          RETURN doCheckPair (result, tinfo, left, right)
+       END
+    END ;
+    RETURN result
+ END checkVarTypeEquivalence ;
+ 
+ 
+ (*
     checkVarEquivalence - this test must be done early as it checks the symbol mode.
                           An LValue is treated as a pointer during assignment and the
                           LValue is attached to a variable.  This function skips the variable
*************** END isLValue ;
*** 722,761 ****
  *)
  
  PROCEDURE checkVarEquivalence (result: status; tinfo: tInfo;
!                                left, right: CARDINAL) : status ;
  BEGIN
     IF isFalse (result)
     THEN
        RETURN result
!    ELSIF IsTyped (left) OR IsTyped (right)
     THEN
        IF tinfo^.kind = assignment
        THEN
           (* LValues are only relevant during assignment.  *)
!          IF isLValue (left) AND (NOT isLValue (right))
           THEN
!             IF SkipType (getType (right)) = Address
              THEN
                 RETURN true
!             ELSIF IsPointer (SkipType (getType (right)))
              THEN
!                right := GetDType (SkipType (getType (right)))
              END
!          ELSIF isLValue (right) AND (NOT isLValue (left))
           THEN
!             IF SkipType (getType (left)) = Address
              THEN
                 RETURN true
!             ELSIF IsPointer (SkipType (getType (left)))
              THEN
!                left := GetDType (SkipType (getType (left)))
              END
           END
        END ;
!       RETURN doCheckPair (result, tinfo, getType (left), getType (right))
!    ELSE
!       RETURN result
!    END
  END checkVarEquivalence ;
  
  
--- 878,921 ----
  *)
  
  PROCEDURE checkVarEquivalence (result: status; tinfo: tInfo;
!                                des, expr: CARDINAL) : status ;
  BEGIN
     IF isFalse (result)
     THEN
        RETURN result
!    ELSIF IsTyped (des) OR IsTyped (expr)
     THEN
        IF tinfo^.kind = assignment
        THEN
+          IF GetDType (des) = GetDType (expr)
+          THEN
+             RETURN true
           (* LValues are only relevant during assignment.  *)
!          ELSIF isLValue (des) AND (NOT isLValue (expr))
           THEN
!             IF SkipType (getType (expr)) = Address
              THEN
                 RETURN true
!             ELSIF IsPointer (SkipType (getType (expr)))
              THEN
!                expr := GetDType (SkipType (getType (expr))) ;
!                RETURN doCheckPair (result, tinfo, getType (des), expr)
              END
!          ELSIF isLValue (expr) AND (NOT isLValue (des))
           THEN
!             IF SkipType (getType (des)) = Address
              THEN
                 RETURN true
!             ELSIF IsPointer (SkipType (getType (des)))
              THEN
!                des := GetDType (SkipType (getType (des))) ;
!                RETURN doCheckPair (result, tinfo, des, getType (expr))
              END
           END
        END ;
!       RETURN doCheckPair (result, tinfo, getType (des), getType (expr))
!    END ;
!    RETURN result
  END checkVarEquivalence ;
  
  
*************** BEGIN
*** 790,799 ****
                 IsProcedure (typeRight) OR IsRecord (typeRight) OR
                 IsReallyPointer (typeRight)
           THEN
!             RETURN false
           ELSIF IsArray (typeRight)
           THEN
!             RETURN doCheckPair (result, tinfo, Char, GetType (typeRight))
           ELSIF GetStringLength (tinfo^.token, left) = 1
           THEN
              RETURN doCheckPair (result, tinfo, Char, typeRight)
--- 950,964 ----
                 IsProcedure (typeRight) OR IsRecord (typeRight) OR
                 IsReallyPointer (typeRight)
           THEN
!             RETURN falseReason1 ('constant string is incompatible with {%1ad}',
!                                  tinfo, typeRight)
           ELSIF IsArray (typeRight)
           THEN
!             RETURN doCheckPair (result, tinfo, Char, GetDType (typeRight))
!          ELSIF NOT GccKnowsAbout (left)
!          THEN
!             (* We do not know the length of this string, so assume true.  *)
!             RETURN true
           ELSIF GetStringLength (tinfo^.token, left) = 1
           THEN
              RETURN doCheckPair (result, tinfo, Char, typeRight)
*************** BEGIN
*** 805,811 ****
        typeLeft := GetDType (left) ;
        IF IsZRCType (typeLeft) AND IsUnbounded (typeRight)
        THEN
!          RETURN false
        ELSE
           RETURN doCheckPair (result, tinfo, typeLeft, typeRight)
        END
--- 970,978 ----
        typeLeft := GetDType (left) ;
        IF IsZRCType (typeLeft) AND IsUnbounded (typeRight)
        THEN
!          RETURN falseReason2 ('the constant {%1a} is incompatible' +
!                               ' with an unbounded array of {%2a}',
!                               tinfo, typeLeft, typeRight)
        ELSE
           RETURN doCheckPair (result, tinfo, typeLeft, typeRight)
        END
*************** END checkConstMeta ;
*** 815,820 ****
--- 982,1039 ----
  
  
  (*
+    checkEnumField -
+ *)
+ 
+ PROCEDURE checkEnumField (result: status; tinfo: tInfo;
+                           left, right: CARDINAL) : status ;
+ VAR
+    typeRight: CARDINAL ;
+ BEGIN
+    Assert (IsFieldEnumeration (left)) ;
+    IF isFalse (result)
+    THEN
+       RETURN result
+    ELSIF IsTyped (right)
+    THEN
+       typeRight := GetDType (right) ;
+       IF typeRight = NulSym
+       THEN
+          RETURN result
+       ELSE
+          RETURN doCheckPair (result, tinfo, GetDType (left), typeRight)
+       END
+    END ;
+    RETURN result
+ END checkEnumField ;
+ 
+ 
+ (*
+    checkEnumFieldEquivalence -
+ *)
+ 
+ PROCEDURE checkEnumFieldEquivalence (result: status; tinfo: tInfo;
+                                      left, right: CARDINAL) : status ;
+ BEGIN
+    IF isFalse (result)
+    THEN
+       RETURN result
+    ELSIF (left = NulSym) OR (right = NulSym)
+    THEN
+       (* No option but to return true.  *)
+       RETURN true
+    ELSIF IsFieldEnumeration (left)
+    THEN
+       RETURN checkEnumField (result, tinfo, left, right)
+    ELSIF IsFieldEnumeration (right)
+    THEN
+       RETURN checkEnumField (result, tinfo, right, left)
+    END ;
+    RETURN result
+ END checkEnumFieldEquivalence ;
+ 
+ 
+ (*
     checkConstEquivalence - this check can be done first as it checks symbols which
                             may have no type.  Ie constant strings.  These constants
                             will likely have their type set during quadruple folding.
*************** BEGIN
*** 861,874 ****
        IF IsSubrange (right)
        THEN
           RETURN doCheckPair (result, tinfo, left, GetDType (right))
-       END ;
-       IF left = right
-       THEN
-          RETURN true
-       ELSE
-          RETURN result
        END
!    END
  END checkSubrangeTypeEquivalence ;
  
  
--- 1080,1088 ----
        IF IsSubrange (right)
        THEN
           RETURN doCheckPair (result, tinfo, left, GetDType (right))
        END
!    END ;
!    RETURN result
  END checkSubrangeTypeEquivalence ;
  
  
*************** PROCEDURE isZRC (zrc, sym: CARDINAL) : B
*** 892,898 ****
  BEGIN
     IF IsConst (sym)
     THEN
!       sym := SkipType (GetType (sym))
     END ;
     IF (zrc = CType) AND (IsComplexN (sym) OR IsComplexType (sym))
     THEN
--- 1106,1112 ----
  BEGIN
     IF IsConst (sym)
     THEN
!       sym := SkipType (GetDType (sym))
     END ;
     IF (zrc = CType) AND (IsComplexN (sym) OR IsComplexType (sym))
     THEN
*************** PROCEDURE isSameSizeConst (a, b: CARDINA
*** 911,921 ****
  BEGIN
     IF IsConst (a)
     THEN
!       a := SkipType (GetType (a)) ;
        RETURN isZRC (a, b) OR (a = b) OR ((a # NulSym) AND isSameSize (a, b))
     ELSIF IsConst (b)
     THEN
!       b := SkipType (GetType (b)) ;
        RETURN isZRC (b, a) OR (a = b) OR ((b # NulSym) AND isSameSize (a, b))
     END ;
     RETURN FALSE
--- 1125,1135 ----
  BEGIN
     IF IsConst (a)
     THEN
!       a := SkipType (GetDType (a)) ;
        RETURN isZRC (a, b) OR (a = b) OR ((a # NulSym) AND isSameSize (a, b))
     ELSIF IsConst (b)
     THEN
!       b := SkipType (GetDType (b)) ;
        RETURN isZRC (b, a) OR (a = b) OR ((b # NulSym) AND isSameSize (a, b))
     END ;
     RETURN FALSE
*************** END isSameSize ;
*** 936,948 ****
     checkSystemEquivalence - check whether left and right are system types and whether they have the same size.
  *)
  
! PROCEDURE checkSystemEquivalence (result: status; left, right: CARDINAL) : status ;
  BEGIN
     IF isFalse (result) OR (result = visited)
     THEN
        RETURN result
     ELSE
        IF (IsGenericSystemType (left) OR IsGenericSystemType (right)) AND
           isSameSize (left, right)
        THEN
           RETURN true
--- 1150,1164 ----
     checkSystemEquivalence - check whether left and right are system types and whether they have the same size.
  *)
  
! PROCEDURE checkSystemEquivalence (result: status; tinfo: tInfo <* unused *>;
!                                   left, right: CARDINAL) : status ;
  BEGIN
     IF isFalse (result) OR (result = visited)
     THEN
        RETURN result
     ELSE
        IF (IsGenericSystemType (left) OR IsGenericSystemType (right)) AND
+          GccKnowsAbout (left) AND GccKnowsAbout (right) AND
           isSameSize (left, right)
        THEN
           RETURN true
*************** END checkSystemEquivalence ;
*** 957,963 ****
                              a set, record or array.
  *)
  
! PROCEDURE checkTypeKindViolation (result: status;
                                    left, right: CARDINAL) : status ;
  BEGIN
     IF isFalse (result) OR (result = visited)
--- 1173,1179 ----
                              a set, record or array.
  *)
  
! PROCEDURE checkTypeKindViolation (result: status; tinfo: tInfo;
                                    left, right: CARDINAL) : status ;
  BEGIN
     IF isFalse (result) OR (result = visited)
*************** BEGIN
*** 969,975 ****
           (IsRecord (left) OR IsRecord (right)) OR
           (IsArray (left) OR IsArray (right))
        THEN
!          RETURN false
        END
     END ;
     RETURN result
--- 1185,1192 ----
           (IsRecord (left) OR IsRecord (right)) OR
           (IsArray (left) OR IsArray (right))
        THEN
!          RETURN falseReason2 ('a {%1ad} is incompatible with a {%2ad}',
!                               tinfo, left, right)
        END
     END ;
     RETURN result
*************** END checkTypeKindViolation ;
*** 977,983 ****
  
  
  (*
!    doCheckPair - invoke a series of ordered type checks checking compatibility
                   between left and right modula2 symbols.
                   Pre-condition: left and right are modula-2 symbols.
                                  tinfo is configured.
--- 1194,1200 ----
  
  
  (*
!    doCheckPair - invoke a series of type checks checking compatibility
                   between left and right modula2 symbols.
                   Pre-condition: left and right are modula-2 symbols.
                                  tinfo is configured.
*************** END checkTypeKindViolation ;
*** 989,1038 ****
  
  PROCEDURE doCheckPair (result: status; tinfo: tInfo;
                         left, right: CARDINAL) : status ;
  BEGIN
!    IF isFalse (result) OR (result = visited)
     THEN
        RETURN return (result, tinfo, left, right)
     ELSIF left = right
     THEN
        RETURN return (true, tinfo, left, right)
     ELSE
!       result := checkConstEquivalence (unknown, tinfo, left, right) ;
!       IF NOT isKnown (result)
!       THEN
!          result := checkVarEquivalence (unknown, tinfo, left, right) ;
!          IF NOT isKnown (result)
           THEN
!             result := checkSystemEquivalence (unknown, left, right) ;
!             IF NOT isKnown (result)
!             THEN
!                result := checkSubrangeTypeEquivalence (unknown, tinfo, left, right) ;
!                IF NOT isKnown (result)
!                THEN
!                   result := checkBaseTypeEquivalence (unknown, tinfo, left, right) ;
!                   IF NOT isKnown (result)
!                   THEN
!                      result := checkTypeEquivalence (unknown, left, right) ;
!                      IF NOT isKnown (result)
!                      THEN
!                         result := checkArrayTypeEquivalence (result, tinfo, left, right) ;
!                         IF NOT isKnown (result)
!                         THEN
!                            result := checkGenericTypeEquivalence (result, left, right) ;
!                            IF NOT isKnown (result)
!                            THEN
!                               result := checkTypeKindEquivalence (result, tinfo, left, right) ;
!                               IF NOT isKnown (result)
!                               THEN
!                                  result := checkTypeKindViolation (result, left, right)
!                               END
!                            END
!                         END
!                      END
!                   END
!                END
!             END
!          END
        END
     END ;
     RETURN return (result, tinfo, left, right)
--- 1206,1233 ----
  
  PROCEDURE doCheckPair (result: status; tinfo: tInfo;
                         left, right: CARDINAL) : status ;
+ VAR
+    i: CARDINAL ;
  BEGIN
!    IF (left = NulSym) OR (right = NulSym)
!    THEN
!       (* We cannot check NulSym.  *)
!       RETURN true
!    ELSIF isKnown (result)
     THEN
        RETURN return (result, tinfo, left, right)
     ELSIF left = right
     THEN
        RETURN return (true, tinfo, left, right)
     ELSE
!       i := 1 ;
!       WHILE i <= HighEquivalence DO
!          result := Equivalence[i] (result, tinfo, left, right) ;
!          IF isKnown (result)
           THEN
!             RETURN return (result, tinfo, left, right)
!          END ;
!          INC (i)
        END
     END ;
     RETURN return (result, tinfo, left, right)
*************** END doCheckPair ;
*** 1040,1045 ****
--- 1235,1279 ----
  
  
  (*
+    InitEquivalenceArray - populate the Equivalence array with the
+                           checking procedures.
+ *)
+ 
+ PROCEDURE InitEquivalenceArray ;
+ BEGIN
+    HighEquivalence := 0 ;
+    addEquivalence (checkVarEquivalence) ;
+    addEquivalence (checkVarTypeEquivalence) ;
+    addEquivalence (checkCharStringTypeEquivalence) ;
+    addEquivalence (checkConstEquivalence);
+    addEquivalence (checkEnumFieldEquivalence) ;
+    addEquivalence (checkSystemEquivalence) ;
+    addEquivalence (checkSubrangeTypeEquivalence) ;
+    addEquivalence (checkBaseTypeEquivalence) ;
+    addEquivalence (checkTypeEquivalence) ;
+    addEquivalence (checkArrayTypeEquivalence) ;
+    addEquivalence (checkTypeKindEquivalence) ;
+    addEquivalence (checkTypeKindViolation)
+ END InitEquivalenceArray ;
+ 
+ 
+ (*
+    addEquivalence - places proc into Equivalence array.
+ *)
+ 
+ PROCEDURE addEquivalence (proc: EquivalenceProcedure) ;
+ BEGIN
+    INC (HighEquivalence) ;
+    IF HighEquivalence <= MaxEquvalence
+    THEN
+       Equivalence[HighEquivalence] := proc
+    ELSE
+       InternalError ('increase MaxEquivalence constant in M2Check.mod')
+    END
+ END addEquivalence ;
+ 
+ 
+ (*
     checkProcType -
  *)
  
*************** BEGIN
*** 1090,1095 ****
--- 1324,1335 ----
        i := 1 ;
        n := NoOfParamAny (left) ;
        WHILE i <= n DO
+          IF isFalse (result) OR (result = visited)
+          THEN
+             (* Seen a mismatch therefore return.  *)
+             RETURN return (result, tinfo, left, right)
+          END ;
+          result := unknown ;   (* Each parameter must match.  *)
           IF IsVarParamAny (left, i) # IsVarParamAny (right, i)
           THEN
              IF IsVarParamAny (left, i)
*************** BEGIN
*** 1281,1287 ****
  END checkProcTypeEquivalence ;
  
  
- 
  (*
     checkTypeKindEquivalence -
  *)
--- 1521,1526 ----
*************** BEGIN
*** 1551,1557 ****
     THEN
        RETURN Address
     ELSE
!       RETURN GetSType (sym)
     END
  END getSType ;
  
--- 1790,1796 ----
     THEN
        RETURN Address
     ELSE
!       RETURN GetDType (sym)
     END
  END getSType ;
  
*************** BEGIN
*** 1627,1637 ****
           printf ("doCheck (%d, %d)\n", left, right) ;
           dumptInfo (tinfo)
        END ;
!       IF isInternal (left) OR isInternal (right)
        THEN
           (* Do not check constants which have been generated internally.
!             Currently these are generated by the default BY constant value
!             in a FOR loop.  *)
           RETURN TRUE
        END ;
        (*
--- 1866,1884 ----
           printf ("doCheck (%d, %d)\n", left, right) ;
           dumptInfo (tinfo)
        END ;
!       IF (left = NulSym) OR (right = NulSym)
!       THEN
!          (* Cannot test if a type is NulSym, we assume true.
!             It maybe that later on a symbols type is set and later
!             on checking will be called and more accurately resolved.
!             For example constant strings can be concatenated during
!             the quadruple folding phase.  *)
!          RETURN TRUE
!       ELSIF isInternal (left) OR isInternal (right)
        THEN
           (* Do not check constants which have been generated internally.
!             Currently these are generated by the default BY constant
!             value in a FOR loop.  *)
           RETURN TRUE
        END ;
        (*
*************** BEGIN
*** 1650,1658 ****
        result := tinfo^.checkFunc (unknown, tinfo, left, right) ;
        IF isKnown (result)
        THEN
!          (* remove this pair from the unresolved list.  *)
           exclude (tinfo^.unresolved, left, right) ;
!          (* add it to the resolved list.  *)
           include (tinfo^.resolved, left, right, result) ;
           IF result = false
           THEN
--- 1897,1905 ----
        result := tinfo^.checkFunc (unknown, tinfo, left, right) ;
        IF isKnown (result)
        THEN
!          (* Remove this pair from the unresolved list.  *)
           exclude (tinfo^.unresolved, left, right) ;
!          (* Add it to the resolved list.  *)
           include (tinfo^.resolved, left, right, result) ;
           IF result = false
           THEN
*************** END deconstructIndex ;
*** 1757,1762 ****
--- 2004,2010 ----
  PROCEDURE deconstruct (tinfo: tInfo) ;
  BEGIN
     tinfo^.format := KillString (tinfo^.format) ;
+    tinfo^.reason := KillString (tinfo^.reason) ;
     tinfo^.visited := deconstructIndex (tinfo^.visited) ;
     tinfo^.resolved := deconstructIndex (tinfo^.resolved) ;
     tinfo^.unresolved := deconstructIndex (tinfo^.unresolved)
*************** END collapseString ;
*** 1803,1813 ****
  *)
  
  PROCEDURE AssignmentTypeCompatible (token: CARDINAL; format: ARRAY OF CHAR;
!                                     des, expr: CARDINAL) : BOOLEAN ;
  VAR
     tinfo: tInfo ;
  BEGIN
     tinfo := newtInfo () ;
     tinfo^.format := collapseString (format) ;
     tinfo^.token := token ;
     tinfo^.kind := assignment ;
--- 2051,2064 ----
  *)
  
  PROCEDURE AssignmentTypeCompatible (token: CARDINAL; format: ARRAY OF CHAR;
!                                     des, expr: CARDINAL;
!                                     enableReason: BOOLEAN) : BOOLEAN ;
  VAR
     tinfo: tInfo ;
  BEGIN
     tinfo := newtInfo () ;
+    tinfo^.reason := NIL ;
+    tinfo^.reasonEnable := enableReason AND StrictTypeReason ;
     tinfo^.format := collapseString (format) ;
     tinfo^.token := token ;
     tinfo^.kind := assignment ;
*************** BEGIN
*** 1852,1857 ****
--- 2103,2110 ----
     tinfo := newtInfo () ;
     formalT := getSType (formal) ;
     actualT := getSType (actual) ;
+    tinfo^.reasonEnable := StrictTypeReason ;
+    tinfo^.reason := NIL ;
     tinfo^.format := collapseString (format) ;
     tinfo^.token := token ;
     tinfo^.kind := parameter ;
*************** VAR
*** 1896,1901 ****
--- 2149,2156 ----
     tinfo: tInfo ;
  BEGIN
     tinfo := newtInfo () ;
+    tinfo^.reasonEnable := StrictTypeReason ;
+    tinfo^.reason := NIL ;
     tinfo^.format := collapseString (format) ;
     tinfo^.token := token ;
     tinfo^.kind := expression ;
*************** PROCEDURE init ;
*** 1960,1966 ****
  BEGIN
     pairFreeList  := NIL ;
     tinfoFreeList := NIL ;
!    errors        := InitIndex (1)
  END init ;
  
  
--- 2215,2222 ----
  BEGIN
     pairFreeList  := NIL ;
     tinfoFreeList := NIL ;
!    errors        := InitIndex (1) ;
!    InitEquivalenceArray
  END init ;
  
  
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/M2GCCDeclare.mod gcc-15-20250719/gcc/m2/gm2-compiler/M2GCCDeclare.mod
*** gcc-15-20250712/gcc/m2/gm2-compiler/M2GCCDeclare.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/M2GCCDeclare.mod	Sat Jul 19 22:32:15 2025
*************** TYPE
*** 251,256 ****
--- 251,257 ----
  VAR
     FreeGroup,
     GlobalGroup         : Group ;    (* The global group of all sets.  *)
+    ErrorDepList,       (* The set of symbols with dependency errors.  *)
     VisitedList,
     ChainedList         : Set ;
     HaveInitDefaultTypes: BOOLEAN ;  (* Have we initialized them yet?  *)
*************** VAR
*** 261,269 ****
     enumDeps            : BOOLEAN ;
  
  
- PROCEDURE mystop ; BEGIN END mystop ;
- 
- 
  (* *************************************************** *)
  (*
     PrintNum -
--- 262,267 ----
*************** END CanBeDeclaredPartiallyViaPartialDepe
*** 1315,1328 ****
  
  
  (*
!    EmitCircularDependancyError - issue a dependancy error.
  *)
  
! PROCEDURE EmitCircularDependancyError (sym: CARDINAL) ;
  BEGIN
!    MetaError1('circular dependancy error found when trying to resolve {%1Uad}',
!               sym)
! END EmitCircularDependancyError ;
  
  
  TYPE
--- 1313,1338 ----
  
  
  (*
!    EmitCircularDependencyError - issue a dependency error.
  *)
  
! PROCEDURE EmitCircularDependencyError (sym: CARDINAL) ;
  BEGIN
!    (* Ensure we only issue one dependency message per symbol for this
!       error classification.  *)
!    IF NOT IsElementInSet (ErrorDepList, sym)
!    THEN
!       IncludeElementIntoSet (ErrorDepList, sym) ;
!       IF IsVar (sym) OR IsParameter (sym)
!       THEN
!          MetaError1 ('circular dependency error found when trying to resolve {%1Had}',
!                      sym)
!       ELSE
!          MetaError1 ('circular dependency error found when trying to resolve {%1Dad}',
!                      sym)
!       END
!    END
! END EmitCircularDependencyError ;
  
  
  TYPE
*************** BEGIN
*** 1529,1545 ****
        IF ForeachTryDeclare (todolist,
                              circulartodo,
                              NotAllDependantsFullyDeclared,
!                             EmitCircularDependancyError)
        THEN
        ELSIF ForeachTryDeclare (partiallydeclared,
                                 circularpartial,
                                 NotAllDependantsPartiallyDeclared,
!                                EmitCircularDependancyError)
        THEN
        ELSIF ForeachTryDeclare (niltypedarrays,
                                 circularniltyped,
                                 NotAllDependantsPartiallyDeclared,
!                                EmitCircularDependancyError)
        THEN
        END
     END ;
--- 1539,1555 ----
        IF ForeachTryDeclare (todolist,
                              circulartodo,
                              NotAllDependantsFullyDeclared,
!                             EmitCircularDependencyError)
        THEN
        ELSIF ForeachTryDeclare (partiallydeclared,
                                 circularpartial,
                                 NotAllDependantsPartiallyDeclared,
!                                EmitCircularDependencyError)
        THEN
        ELSIF ForeachTryDeclare (niltypedarrays,
                                 circularniltyped,
                                 NotAllDependantsPartiallyDeclared,
!                                EmitCircularDependencyError)
        THEN
        END
     END ;
*************** BEGIN
*** 2855,2867 ****
     n := 1 ;
     Var := GetNth(scope, n) ;
     WHILE Var#NulSym DO
!       IF NOT AllDependantsFullyDeclared(GetSType(Var))
!       THEN
!          mystop
!       END ;
!       IF NOT AllDependantsFullyDeclared(GetSType(Var))
        THEN
-          EmitCircularDependancyError(GetSType(Var)) ;
           failed := TRUE
        END ;
        INC(n) ;
--- 2865,2872 ----
     n := 1 ;
     Var := GetNth(scope, n) ;
     WHILE Var#NulSym DO
!       IF NOT TypeDependentsDeclared (Var, TRUE)
        THEN
           failed := TRUE
        END ;
        INC(n) ;
*************** BEGIN
*** 2922,2935 ****
        DeclareTypesConstantsProcedures(scope) ; (* will resolved TYPEs and CONSTs on the ToDo  *)
                                                 (* lists.                                      *)
        ForeachModuleDo(DeclareProcedure) ;
!       (*
!          now that all types have been resolved it is safe to declare
!          variables
!       *)
        AssertAllTypesDeclared(scope) ;
        DeclareGlobalVariables(scope) ;
        ForeachImportedDo(scope, DeclareImportedVariables) ;
!       (* now it is safe to declare all procedures *)
        ForeachProcedureDo(scope, DeclareProcedure) ;
        ForeachInnerModuleDo(scope, WalkTypesInModule) ;
        ForeachInnerModuleDo(scope, DeclareTypesConstantsProcedures) ;
--- 2927,2938 ----
        DeclareTypesConstantsProcedures(scope) ; (* will resolved TYPEs and CONSTs on the ToDo  *)
                                                 (* lists.                                      *)
        ForeachModuleDo(DeclareProcedure) ;
!       (* Now that all types have been resolved it is safe to declare
!          variables.  *)
        AssertAllTypesDeclared(scope) ;
        DeclareGlobalVariables(scope) ;
        ForeachImportedDo(scope, DeclareImportedVariables) ;
!       (* Now it is safe to declare all procedures.  *)
        ForeachProcedureDo(scope, DeclareProcedure) ;
        ForeachInnerModuleDo(scope, WalkTypesInModule) ;
        ForeachInnerModuleDo(scope, DeclareTypesConstantsProcedures) ;
*************** BEGIN
*** 2958,2971 ****
                                                 (* lists.                                      *)
        ForeachModuleDo(DeclareProcedure) ;
        ForeachModuleDo(DeclareModuleInit) ;
!       (*
!          now that all types have been resolved it is safe to declare
!          variables
!       *)
        AssertAllTypesDeclared(scope) ;
        DeclareGlobalVariablesWholeProgram(scope) ;
        ForeachImportedDo(scope, DeclareImportedVariablesWholeProgram) ;
!       (* now it is safe to declare all procedures *)
        ForeachProcedureDo(scope, DeclareProcedure) ;
        ForeachInnerModuleDo(scope, WalkTypesInModule) ;
        ForeachInnerModuleDo(scope, DeclareTypesConstantsProcedures) ;
--- 2961,2972 ----
                                                 (* lists.                                      *)
        ForeachModuleDo(DeclareProcedure) ;
        ForeachModuleDo(DeclareModuleInit) ;
!       (* Now that all types have been resolved it is safe to declare
!          variables.  *)
        AssertAllTypesDeclared(scope) ;
        DeclareGlobalVariablesWholeProgram(scope) ;
        ForeachImportedDo(scope, DeclareImportedVariablesWholeProgram) ;
!       (* Now it is safe to declare all procedures.  *)
        ForeachProcedureDo(scope, DeclareProcedure) ;
        ForeachInnerModuleDo(scope, WalkTypesInModule) ;
        ForeachInnerModuleDo(scope, DeclareTypesConstantsProcedures) ;
*************** PROCEDURE DoVariableDeclaration (var: CA
*** 3411,3425 ****
                                   isImported, isExported,
                                   isTemporary, isGlobal: BOOLEAN;
                                   scope: tree) ;
  VAR
     type    : tree ;
     varType : CARDINAL ;
     location: location_t ;
  BEGIN
-    IF IsComponent (var) OR IsVarHeap (var)
-    THEN
-       RETURN
-    END ;
     IF GetMode (var) = LeftValue
     THEN
        (*
--- 3412,3466 ----
                                   isImported, isExported,
                                   isTemporary, isGlobal: BOOLEAN;
                                   scope: tree) ;
+ BEGIN
+    IF NOT (IsComponent (var) OR IsVarHeap (var))
+    THEN
+       IF TypeDependentsDeclared (var, TRUE)
+       THEN
+          PrepareGCCVarDeclaration (var, name, isImported, isExported,
+                                    isTemporary, isGlobal, scope)
+       END
+    END
+ END DoVariableDeclaration ;
+ 
+ 
+ (*
+    TypeDependentsDeclared - return TRUE if all type dependents of variable
+                             have been declared.
+ *)
+ 
+ PROCEDURE TypeDependentsDeclared (variable: CARDINAL; errorMessage: BOOLEAN) : BOOLEAN ;
+ VAR
+    type: CARDINAL ;
+ BEGIN
+    type := GetSType (variable) ;
+    IF AllDependantsFullyDeclared (type)
+    THEN
+       RETURN TRUE
+    ELSE
+       IF errorMessage
+       THEN
+          EmitCircularDependencyError (variable) ;
+          ForeachElementInSetDo (GlobalGroup^.ToDoList, EmitCircularDependencyError)
+       END
+    END ;
+    RETURN FALSE
+ END TypeDependentsDeclared ;
+ 
+ 
+ (*
+    PrepareGCCVarDeclaration -
+ *)
+ 
+ PROCEDURE PrepareGCCVarDeclaration (var: CARDINAL; name: ADDRESS;
+                                     isImported, isExported,
+                                     isTemporary, isGlobal: BOOLEAN;
+                                     scope: tree) ;
  VAR
     type    : tree ;
     varType : CARDINAL ;
     location: location_t ;
  BEGIN
     IF GetMode (var) = LeftValue
     THEN
        (*
*************** BEGIN
*** 3457,3463 ****
                                              isGlobal, scope, NIL)) ;
     WatchRemoveList (var, todolist) ;
     WatchIncludeList (var, fullydeclared)
! END DoVariableDeclaration ;
  
  
  (*
--- 3498,3504 ----
                                              isGlobal, scope, NIL)) ;
     WatchRemoveList (var, todolist) ;
     WatchIncludeList (var, fullydeclared)
! END PrepareGCCVarDeclaration ;
  
  
  (*
*************** BEGIN
*** 3493,3499 ****
     THEN
        scope := FindContext (ModSym) ;
        decl := FindOuterModule (variable) ;
-       Assert (AllDependantsFullyDeclared (GetSType (variable))) ;
        PushBinding (ModSym) ;
        DoVariableDeclaration (variable,
                               KeyToCharStar (GetFullSymName (variable)),
--- 3534,3539 ----
*************** BEGIN
*** 3521,3527 ****
     THEN
        scope := FindContext (mainModule) ;
        decl := FindOuterModule (variable) ;
-       Assert (AllDependantsFullyDeclared (GetSType (variable))) ;
        PushBinding (mainModule) ;
        DoVariableDeclaration (variable,
                               KeyToCharStar (GetFullSymName (variable)),
--- 3561,3566 ----
*************** END DeclareImportedVariablesWholeProgram
*** 3618,3624 ****
  
  PROCEDURE DeclareLocalVariable (var: CARDINAL) ;
  BEGIN
-    Assert (AllDependantsFullyDeclared (var)) ;
     DoVariableDeclaration (var,
                            KeyToCharStar (GetFullSymName (var)),
                            FALSE,  (* local variables cannot be imported *)
--- 3657,3662 ----
*************** BEGIN
*** 3662,3668 ****
     scope := Mod2Gcc (GetProcedureScope (sym)) ;
     Var := GetNth (sym, i) ;
     WHILE Var # NulSym DO
-       Assert (AllDependantsFullyDeclared (GetSType (Var))) ;
        DoVariableDeclaration (Var,
                               KeyToCharStar (GetFullSymName (Var)),
                               FALSE,   (* inner module variables cannot be imported *)
--- 3700,3705 ----
*************** END InitDeclarations ;
*** 6658,6663 ****
--- 6695,6701 ----
  BEGIN
     FreeGroup := NIL ;
     GlobalGroup := InitGroup () ;
+    ErrorDepList := InitSet (1) ;
     ChainedList := InitSet(1) ;
     WatchList := InitSet(1) ;
     VisitedList := NIL ;
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/M2GenGCC.mod gcc-15-20250719/gcc/m2/gm2-compiler/M2GenGCC.mod
*** gcc-15-20250712/gcc/m2/gm2-compiler/M2GenGCC.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/M2GenGCC.mod	Sat Jul 19 22:32:15 2025
*************** BEGIN
*** 681,687 ****
     IfGreOp            : CodeIfGre (q) |
     IfInOp             : CodeIfIn (q) |
     IfNotInOp          : CodeIfNotIn (q) |
!    IndrXOp            : CodeIndrX (q, op1, op2, op3) |
     XIndrOp            : CodeXIndr (q) |
     CallOp             : CodeCall (CurrentQuadToken, op3) |
     ParamOp            : CodeParam (q) |
--- 681,687 ----
     IfGreOp            : CodeIfGre (q) |
     IfInOp             : CodeIfIn (q) |
     IfNotInOp          : CodeIfNotIn (q) |
!    IndrXOp            : CodeIndrX (q) |
     XIndrOp            : CodeXIndr (q) |
     CallOp             : CodeCall (CurrentQuadToken, op3) |
     ParamOp            : CodeParam (q) |
*************** BEGIN
*** 3004,3010 ****
                  despos, op2pos, exprpos) ;
     Assert (op2pos = UnknownTokenNo) ;
     IF StrictTypeChecking AND
!       (NOT AssignmentTypeCompatible (despos, "", des, expr))
     THEN
        MetaErrorT2 (MakeVirtualTok (becomespos, despos, exprpos),
                     'assignment check caught mismatch between {%1Ead} and {%2ad}',
--- 3004,3010 ----
                  despos, op2pos, exprpos) ;
     Assert (op2pos = UnknownTokenNo) ;
     IF StrictTypeChecking AND
!       (NOT AssignmentTypeCompatible (despos, "", des, expr, TRUE))
     THEN
        MetaErrorT2 (MakeVirtualTok (becomespos, despos, exprpos),
                     'assignment check caught mismatch between {%1Ead} and {%2ad}',
*************** BEGIN
*** 3233,3239 ****
        IF SkipType(GetTypeMode(op1))#SkipType(GetTypeMode(op3))
        THEN
           DescribeTypeError (tokenno, op1, op3) ;
!          (* Assigning an errant op3 might ICE, therefore it is safer to return op1.  *)         
           RETURN( Mod2Gcc (op1) )
        END
     END ;
--- 3233,3239 ----
        IF SkipType(GetTypeMode(op1))#SkipType(GetTypeMode(op3))
        THEN
           DescribeTypeError (tokenno, op1, op3) ;
!          (* Assigning an errant op3 might ICE, therefore it is safer to return op1.  *)
           RETURN( Mod2Gcc (op1) )
        END
     END ;
*************** BEGIN
*** 3550,3556 ****
     location := TokenToLocation (virtpos) ;
  
     IF StrictTypeChecking AND
!       (NOT AssignmentTypeCompatible (virtpos, "", des, expr))
     THEN
        ErrorMessageDecl (virtpos,
                          'assignment check caught mismatch between {%1Ead} and {%2ad}',
--- 3550,3556 ----
     location := TokenToLocation (virtpos) ;
  
     IF StrictTypeChecking AND
!       (NOT AssignmentTypeCompatible (virtpos, "", des, expr, TRUE))
     THEN
        ErrorMessageDecl (virtpos,
                          'assignment check caught mismatch between {%1Ead} and {%2ad}',
*************** END NoWalkProcedure ;
*** 3918,3925 ****
  
  PROCEDURE CheckBinaryExpressionTypes (quad: CARDINAL; p: WalkAction) : BOOLEAN ;
  VAR
-    lefttype,
-    righttype,
     des, left, right: CARDINAL ;
     typeChecking,
     constExpr,
--- 3918,3923 ----
*************** BEGIN
*** 3937,3946 ****
     IF typeChecking AND (op # LogicalRotateOp) AND (op # LogicalShiftOp)
     THEN
        subexprpos := MakeVirtualTok (operatorpos, leftpos, rightpos) ;
-       lefttype := GetType (left) ;
-       righttype := GetType (right) ;
        IF StrictTypeChecking AND
!          (NOT ExpressionTypeCompatible (subexprpos, "", lefttype, righttype,
                                          StrictTypeChecking, FALSE))
        THEN
           MetaErrorT2 (subexprpos,
--- 3935,3942 ----
     IF typeChecking AND (op # LogicalRotateOp) AND (op # LogicalShiftOp)
     THEN
        subexprpos := MakeVirtualTok (operatorpos, leftpos, rightpos) ;
        IF StrictTypeChecking AND
!          (NOT ExpressionTypeCompatible (subexprpos, "", left, right,
                                          StrictTypeChecking, FALSE))
        THEN
           MetaErrorT2 (subexprpos,
*************** BEGIN
*** 3950,3968 ****
           SubQuad (quad) ;
           p (des) ;
           RETURN FALSE
-       END ;
-       (* --fixme-- the ExpressionTypeCompatible above should be enough
-          and the code below can be removed once ExpressionTypeCompatible
-          is bug free.  *)
-       IF NOT IsExpressionCompatible (lefttype, righttype)
-       THEN
-          ErrorMessageDecl (subexprpos,
-                            'expression mismatch between {%1Etad} and {%2tad}',
-                            left, right, TRUE) ;
-          NoChange := FALSE ;
-          SubQuad (quad) ;
-          p (des) ;
-          RETURN FALSE
        END
     END ;
     RETURN TRUE
--- 3946,3951 ----
*************** END CheckBinaryExpressionTypes ;
*** 3978,3984 ****
  
  PROCEDURE CheckElementSetTypes (quad: CARDINAL) : BOOLEAN ;
  VAR
-    lefttype,
     righttype,
     ignore, left, right: CARDINAL ;
     constExpr,
--- 3961,3966 ----
*************** BEGIN
*** 3995,4007 ****
                  overflowChecking, constExpr,
                  leftpos, rightpos, ignorepos) ;
     subexprpos := MakeVirtualTok (operatorpos, leftpos, rightpos) ;
-    lefttype := GetType (left) ;
     righttype := GetType (right) ;
-    (* --fixme-- the ExpressionTypeCompatible below does not always catch
-       type errors, it needs to be fixed and then some of the subsequent tests
-       can be removed (and/or this procedure function rewritten).  *)
     IF StrictTypeChecking AND
!       (NOT ExpressionTypeCompatible (subexprpos, "", lefttype, righttype,
                                       StrictTypeChecking, TRUE))
     THEN
        MetaErrorT2 (subexprpos,
--- 3977,3985 ----
                  overflowChecking, constExpr,
                  leftpos, rightpos, ignorepos) ;
     subexprpos := MakeVirtualTok (operatorpos, leftpos, rightpos) ;
     righttype := GetType (right) ;
     IF StrictTypeChecking AND
!       (NOT ExpressionTypeCompatible (subexprpos, "", left, right,
                                       StrictTypeChecking, TRUE))
     THEN
        MetaErrorT2 (subexprpos,
*************** BEGIN
*** 4020,4036 ****
        SubQuad (quad) ;
        RETURN FALSE
     END ;
-    righttype := GetType (SkipType (righttype)) ;
-    (* Now fall though and compare the set element left against the type of set righttype.  *)
-    IF NOT IsExpressionCompatible (lefttype, righttype)
-    THEN
-       ErrorMessageDecl (subexprpos,
-                         'the types used in expression {%1Etad} {%kIN} {%2tad} are incompatible',
-                         left, right, TRUE) ;
-       NoChange := FALSE ;
-       SubQuad (quad) ;
-       RETURN FALSE
-    END ;
     RETURN TRUE
  END CheckElementSetTypes ;
  
--- 3998,4003 ----
*************** END CodeIfNotIn ;
*** 8174,8198 ****
     (op2 is the type of the data being indirectly copied)
  *)
  
! PROCEDURE CodeIndrX (quad: CARDINAL; op1, op2, op3: CARDINAL) ;
  VAR
!    location: location_t ;
  BEGIN
!    location := TokenToLocation (CurrentQuadToken) ;
  
     (*
        Follow the Quadruple rules:
     *)
!    DeclareConstant (CurrentQuadToken, op3) ;  (* checks to see whether it is a constant and declares it *)
!    DeclareConstructor (CurrentQuadToken, quad, op3) ;
!    IF IsConstString (op3)
     THEN
        InternalError ('not expecting to index through a constant string')
     ELSE
        (*
           Mem[op1] := Mem[Mem[op3]]
        *)
!       BuildAssignmentStatement (location, Mod2Gcc (op1), BuildIndirect (location, Mod2Gcc (op3), Mod2Gcc (op2)))
     END
  END CodeIndrX ;
  
--- 8141,8192 ----
     (op2 is the type of the data being indirectly copied)
  *)
  
! PROCEDURE CodeIndrX (quad: CARDINAL) ;
  VAR
!    constExpr,
!    overflowChecking: BOOLEAN ;
!    op              : QuadOperator ;
!    tokenno,
!    left,
!    type,
!    right,
!    leftpos,
!    rightpos,
!    typepos,
!    indrxpos        : CARDINAL ;
!    length,
!    newstr          : tree ;
!    location        : location_t ;
  BEGIN
!    GetQuadOtok (quad, indrxpos, op, left, type, right,
!                 overflowChecking, constExpr,
!                 leftpos, typepos, rightpos) ;
!    tokenno := MakeVirtualTok (indrxpos, leftpos, rightpos) ;
!    location := TokenToLocation (tokenno) ;
  
     (*
        Follow the Quadruple rules:
     *)
!    DeclareConstant (rightpos, right) ;  (* Checks to see whether it is a constant
!                                            and if necessary declare it.  *)
!    DeclareConstructor (rightpos, quad, right) ;
!    IF IsConstString (right)
     THEN
        InternalError ('not expecting to index through a constant string')
+    ELSIF StrictTypeChecking AND
+       (NOT AssignmentTypeCompatible (indrxpos, "", left, GetType (right), TRUE))
+    THEN
+       MetaErrorT2 (tokenno,
+                    'assignment check caught mismatch between {%1Ead} and {%2ad}',
+                    left, right) ;
+       SubQuad (quad)
     ELSE
+ 
        (*
           Mem[op1] := Mem[Mem[op3]]
        *)
!       BuildAssignmentStatement (location, Mod2Gcc (left),
!                                 BuildIndirect (location, Mod2Gcc (right), Mod2Gcc (type)))
     END
  END CodeIndrX ;
  
*************** BEGIN
*** 8229,8234 ****
--- 8223,8236 ----
     type := SkipType (type) ;
     DeclareConstant (rightpos, right) ;
     DeclareConstructor (rightpos, quad, right) ;
+    IF StrictTypeChecking AND
+       (NOT AssignmentTypeCompatible (xindrpos, "", GetType (left), right, TRUE))
+    THEN
+       MetaErrorT2 (tokenno,
+                    'assignment check caught mismatch between {%1Ead} and {%2ad}',
+                    left, right) ;
+       SubQuad (quad)
+    END ;
     IF IsProcType(SkipType(type))
     THEN
        BuildAssignmentStatement (location, BuildIndirect (location, Mod2Gcc (left), GetPointerType ()), Mod2Gcc (right))
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/M2MetaError.def gcc-15-20250719/gcc/m2/gm2-compiler/M2MetaError.def
*** gcc-15-20250712/gcc/m2/gm2-compiler/M2MetaError.def	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/M2MetaError.def	Sat Jul 19 22:32:15 2025
*************** FROM NameKey IMPORT Name ;
*** 93,101 ****
      %}        }
      the error messages may also embed optional strings such as:
  
!     {%1a:this string is emitted if the symbol name is non null}
!     {!%1a:this string is emitted if the symbol name is null}
!     {!%1a:{%1d}}
             if the symbol name does not exist then print a description
             of the symbol.
      {%1atd} was incompatible with the return type of the procedure
--- 93,101 ----
      %}        }
      the error messages may also embed optional strings such as:
  
!     {%1a:this string is emitted if the symbol name is null}
!     {!%1a:this string is emitted if the symbol name is non null}
!     {%1a:{%1d}}
             if the symbol name does not exist then print a description
             of the symbol.
      {%1atd} was incompatible with the return type of the procedure
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/M2MetaError.mod gcc-15-20250719/gcc/m2/gm2-compiler/M2MetaError.mod
*** gcc-15-20250712/gcc/m2/gm2-compiler/M2MetaError.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/M2MetaError.mod	Sat Jul 19 22:32:15 2025
*************** BEGIN
*** 1437,1471 ****
        doError (eb, GetDeclaredDef (sym))
     ELSE
        M2Error.EnterErrorScope (GetErrorScope (scope)) ;
!       IF IsProcedure (scope)
        THEN
!          IF IsVar (sym) OR IsParameter (sym)
!          THEN
!             doError (eb, GetVarParamTok (sym))
!          ELSE
!             doError (eb, GetDeclaredDef (sym))
!          END
        ELSE
!          IF IsModule (scope)
           THEN
!             IF IsInnerModule (scope)
!             THEN
!                doError (eb, GetDeclaredDef (sym))
!             ELSE
!                doError (eb, GetDeclaredDef (sym))
!             END
           ELSE
!             Assert (IsDefImp (scope)) ;
!             (* if this fails then we need to skip to the outer scope.
!             REPEAT
!              OuterModule := GetScope(OuterModule)
!             UNTIL GetScope(OuterModule)=NulSym ;  *)
!             IF GetDeclaredDefinition (sym) = UnknownTokenNo
!             THEN
!                doError (eb, GetDeclaredMod (sym))
!             ELSE
!                doError (eb, GetDeclaredDef (sym))
!             END
           END
        END
     END ;
--- 1437,1458 ----
        doError (eb, GetDeclaredDef (sym))
     ELSE
        M2Error.EnterErrorScope (GetErrorScope (scope)) ;
!       IF IsVar (sym) OR IsParameter (sym)
        THEN
!          doError (eb, GetVarParamTok (sym))
!       ELSIF IsProcedure (scope)
!       THEN
!          doError (eb, GetDeclaredDef (sym))
!       ELSIF IsModule (scope)
!       THEN
!          doError (eb, GetDeclaredMod (sym))
        ELSE
!          Assert (IsDefImp (scope)) ;
!          IF GetDeclaredDefinition (sym) = UnknownTokenNo
           THEN
!             doError (eb, GetDeclaredMod (sym))
           ELSE
!             doError (eb, GetDeclaredDef (sym))
           END
        END
     END ;
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/M2Options.def gcc-15-20250719/gcc/m2/gm2-compiler/M2Options.def
*** gcc-15-20250712/gcc/m2/gm2-compiler/M2Options.def	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/M2Options.def	Sat Jul 19 22:32:15 2025
*************** VAR
*** 87,92 ****
--- 87,94 ----
     LineDirectives,               (* Should compiler understand preprocessor  *)
                                   (* # linenumber "filename" markers?         *)
     StrictTypeChecking,           (* -fm2-strict-type experimental checker.   *)
+    StrictTypeAssignment,         (* -fm2-strict-assignment.                  *)
+    StrictTypeReason,             (* -fm2-strict-reason.                      *)
     CPreProcessor,                (* Must we run the cpp on the source?       *)
     Xcode,                        (* Should errors follow Xcode format?       *)
     ExtendedOpaque,               (* Do we allow non pointer opaque types?    *)
*************** PROCEDURE SetStrictTypeChecking (value:
*** 756,761 ****
--- 758,777 ----
  
  
  (*
+    SetStrictTypeAssignment - assigns the StrictTypeAssignment flag to value.
+ *)
+ 
+ PROCEDURE SetStrictTypeAssignment (value: BOOLEAN) ;
+ 
+ 
+ (*
+    SetStrictTypeReason - assigns the StrictTypeReason flag to value.
+ *)
+ 
+ PROCEDURE SetStrictTypeReason (value: BOOLEAN) ;
+ 
+ 
+ (*
     setdefextension - set the source file definition module extension to arg.
                       This should include the . and by default it is set to .def.
  *)
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/M2Options.mod gcc-15-20250719/gcc/m2/gm2-compiler/M2Options.mod
*** gcc-15-20250712/gcc/m2/gm2-compiler/M2Options.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/M2Options.mod	Sat Jul 19 22:32:15 2025
*************** END SetStrictTypeChecking ;
*** 657,662 ****
--- 657,682 ----
  
  
  (*
+    SetStrictTypeAssignment - assigns the StrictTypeAssignment flag to value.
+ *)
+ 
+ PROCEDURE SetStrictTypeAssignment (value: BOOLEAN) ;
+ BEGIN
+    StrictTypeAssignment := value
+ END SetStrictTypeAssignment ;
+ 
+ 
+ (*
+    SetStrictTypeReason - assigns the StrictTypeReason flag to value.
+ *)
+ 
+ PROCEDURE SetStrictTypeReason (value: BOOLEAN) ;
+ BEGIN
+    StrictTypeReason := value
+ END SetStrictTypeReason ;
+ 
+ 
+ (*
     SetVerboseUnbounded - sets the VerboseUnbounded flag to, value.
  *)
  
*************** BEGIN
*** 2111,2116 ****
--- 2131,2138 ----
     UnusedVariableChecking            := FALSE ;
     UnusedParameterChecking           := FALSE ;
     StrictTypeChecking                := TRUE ;
+    StrictTypeAssignment              := TRUE ;
+    StrictTypeReason                  := TRUE ;
     AutoInit                          := FALSE ;
     SaveTemps                         := FALSE ;
     ScaffoldDynamic                   := TRUE ;
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/M2Quads.mod gcc-15-20250719/gcc/m2/gm2-compiler/M2Quads.mod
*** gcc-15-20250712/gcc/m2/gm2-compiler/M2Quads.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/M2Quads.mod	Sat Jul 19 22:32:15 2025
*************** FROM M2Options IMPORT NilChecking,
*** 226,231 ****
--- 226,232 ----
                        GenerateLineDebug, Exceptions,
                        Profiling, Coding, Optimizing,
                        UninitVariableChecking,
+                       StrictTypeAssignment,
                        ScaffoldDynamic, ScaffoldStatic, cflag,
                        ScaffoldMain, SharedFlag, WholeProgram,
                        GetDumpDir, GetM2DumpFilter,
*************** FROM M2Range IMPORT InitAssignmentRangeC
*** 258,265 ****
--- 259,268 ----
                      InitRotateCheck,
                      InitShiftCheck,
                      InitTypesAssignmentCheck,
+                     InitTypesIndrXCheck,
                      InitTypesExpressionCheck,
                      InitTypesParameterCheck,
+                     InitTypesReturnTypeCheck,
                      InitForLoopBeginRangeCheck,
                      InitForLoopToRangeCheck,
                      InitForLoopEndRangeCheck,
*************** IMPORT M2Error, FIO, SFIO, DynamicString
*** 284,290 ****
  CONST
     DebugStackOn = TRUE ;
     DebugVarients = FALSE ;
-    BreakAtQuad = 758 ;
     DebugTokPos = FALSE ;
  
  TYPE
--- 287,292 ----
*************** VAR
*** 397,402 ****
--- 399,405 ----
                                        (* in order.                               *)
     NoOfQuads            : CARDINAL ;  (* Number of used quadruples.              *)
     Head                 : CARDINAL ;  (* Head of the list of quadruples.         *)
+    BreakQuad            : CARDINAL ;  (* Stop when BreakQuad is created.         *)
  
  
  (*
*************** BEGIN
*** 1487,1508 ****
  END AddQuadInformation ;
  
  
- PROCEDURE stop ; BEGIN END stop ;
- 
- 
- (*
-    CheckBreak - check whether QuadNo = BreakAtQuad and if so call stop.
- *)
- 
- PROCEDURE CheckBreak (QuadNo: CARDINAL) ;
- BEGIN
-    IF QuadNo = BreakAtQuad
-    THEN
-       stop
-    END
- END CheckBreak ;
- 
- 
  (*
     PutQuadO - alters a quadruple QuadNo with Op, Oper1, Oper2, Oper3, and
                sets a boolean to determinine whether overflow should be checked.
--- 1490,1495 ----
*************** BEGIN
*** 3888,3893 ****
--- 3875,3884 ----
        THEN
           MetaErrorT1 (combinedtok, 'combined {%1Oad}', Des)
        END ;
+       IF StrictTypeAssignment
+       THEN
+          BuildRange (InitTypesAssignmentCheck (combinedtok, Des, Exp))
+       END ;
        IF (GetSType (Des) # NulSym) AND (NOT IsSet (GetDType (Des)))
        THEN
           (* Tell code generator to test runtime values of assignment so ensure we
*************** BEGIN
*** 4655,4660 ****
--- 4646,4653 ----
                     BySym) ;
        MetaErrorDecl (BySym, TRUE)
     ELSE
+       e1 := DereferenceLValue (e1tok, e1) ;
+       e2 := DereferenceLValue (e2tok, e2) ;
        GenQuadOTypetok (bytok, LastForIteratorOp, LastIterator,
                         Make2Tuple (e1, e2), BySym, FALSE, FALSE,
                         bytok, MakeVirtual2Tok (e1tok, e2tok), bytok)
*************** VAR
*** 5628,5634 ****
     proctok,
     paramtok    : CARDINAL ;
     n1, n2      : Name ;
!    ParamCheckId,   
     Dim,
     Actual,
     FormalI,
--- 5621,5627 ----
     proctok,
     paramtok    : CARDINAL ;
     n1, n2      : Name ;
!    ParamCheckId,
     Dim,
     Actual,
     FormalI,
*************** VAR
*** 5770,5811 ****
     CheckedProcedure: CARDINAL ;
     e               : Error ;
  BEGIN
-    n := NoOfParamAny (ProcType) ;
     IF IsVar(call) OR IsTemporary(call) OR IsParameter(call)
     THEN
        CheckedProcedure := GetDType(call)
     ELSE
        CheckedProcedure := call
     END ;
!    IF n # NoOfParamAny (CheckedProcedure)
     THEN
!       e := NewError(GetDeclaredMod(ProcType)) ;
!       n1 := GetSymName(call) ;
!       n2 := GetSymName(ProcType) ;
!       ErrorFormat2(e, 'procedure (%a) is a parameter being passed as variable (%a) but they are declared with different number of parameters',
!                    n1, n2) ;
!       e := ChainError(GetDeclaredMod(call), e) ;
!       t := NoOfParamAny (CheckedProcedure) ;
!       IF n<2
        THEN
!          ErrorFormat3(e, 'procedure (%a) is being called incorrectly with (%d) parameter, declared with (%d)',
!                       n1, n, t)
!       ELSE
!          ErrorFormat3(e, 'procedure (%a) is being called incorrectly with (%d) parameters, declared with (%d)',
!                       n1, n, t)
!       END
!    ELSE
!       i := 1 ;
!       WHILE i<=n DO
!          IF IsVarParamAny (ProcType, i) # IsVarParamAny (CheckedProcedure, i)
           THEN
!             MetaError3 ('parameter {%3n} in {%1dD} causes a mismatch it was declared as a {%2d}', ProcType, GetNth (ProcType, i), i) ;
!             MetaError3 ('parameter {%3n} in {%1dD} causes a mismatch it was declared as a {%2d}', call, GetNth (call, i), i)
!          END ;
!          BuildRange (InitTypesParameterCheck (tokno, CheckedProcedure, i,
!                                               GetNthParamAnyClosest (CheckedProcedure, i, GetCurrentModule ()),
!                                               GetParam (ProcType, i), ParamCheckId)) ;
!          INC(i)
        END
     END
  END CheckProcTypeAndProcedure ;
--- 5763,5808 ----
     CheckedProcedure: CARDINAL ;
     e               : Error ;
  BEGIN
     IF IsVar(call) OR IsTemporary(call) OR IsParameter(call)
     THEN
        CheckedProcedure := GetDType(call)
     ELSE
        CheckedProcedure := call
     END ;
!    IF ProcType # CheckedProcedure
     THEN
!       n := NoOfParamAny (ProcType) ;
!       (* We need to check the formal parameters between the procedure and proc type.  *)
!       IF n # NoOfParamAny (CheckedProcedure)
        THEN
!          e := NewError(GetDeclaredMod(ProcType)) ;
!          n1 := GetSymName(call) ;
!          n2 := GetSymName(ProcType) ;
!          ErrorFormat2(e, 'procedure (%a) is a parameter being passed as variable (%a) but they are declared with different number of parameters',
!                       n1, n2) ;
!          e := ChainError(GetDeclaredMod(call), e) ;
!          t := NoOfParamAny (CheckedProcedure) ;
!          IF n<2
           THEN
!             ErrorFormat3(e, 'procedure (%a) is being called incorrectly with (%d) parameter, declared with (%d)',
!                          n1, n, t)
!          ELSE
!             ErrorFormat3(e, 'procedure (%a) is being called incorrectly with (%d) parameters, declared with (%d)',
!                          n1, n, t)
!          END
!       ELSE
!          i := 1 ;
!          WHILE i<=n DO
!             IF IsVarParamAny (ProcType, i) # IsVarParamAny (CheckedProcedure, i)
!             THEN
!                MetaError3 ('parameter {%3n} in {%1dD} causes a mismatch it was declared as a {%2d}', ProcType, GetNth (ProcType, i), i) ;
!                MetaError3 ('parameter {%3n} in {%1dD} causes a mismatch it was declared as a {%2d}', call, GetNth (call, i), i)
!             END ;
!             BuildRange (InitTypesParameterCheck (tokno, CheckedProcedure, i,
!                                                  GetNthParamAnyClosest (CheckedProcedure, i, GetCurrentModule ()),
!                                                  GetParam (ProcType, i), ParamCheckId)) ;
!             INC(i)
!          END
        END
     END
  END CheckProcTypeAndProcedure ;
*************** END ExpectVariable ;
*** 6272,6292 ****
     doIndrX - perform des = *exp with a conversion if necessary.
  *)
  
! PROCEDURE doIndrX (tok: CARDINAL;
!                    des, exp: CARDINAL) ;
  VAR
     t: CARDINAL ;
  BEGIN
!    IF GetDType(des)=GetDType(exp)
     THEN
        GenQuadOtok (tok, IndrXOp, des, GetSType (des), exp, TRUE,
                     tok, tok, tok)
     ELSE
        t := MakeTemporary (tok, RightValue) ;
        PutVar (t, GetSType (exp)) ;
        GenQuadOtok (tok, IndrXOp, t, GetSType (exp), exp, TRUE,
                     tok, tok, tok) ;
!       GenQuadOtok (tok, BecomesOp, des, NulSym, doVal (GetSType(des), t), TRUE,
                     tok, UnknownTokenNo, tok)
     END
  END doIndrX ;
--- 6269,6292 ----
     doIndrX - perform des = *exp with a conversion if necessary.
  *)
  
! PROCEDURE doIndrX (tok: CARDINAL; des, exp: CARDINAL) ;
  VAR
     t: CARDINAL ;
  BEGIN
!    IF GetDType (des) = GetDType (exp)
     THEN
        GenQuadOtok (tok, IndrXOp, des, GetSType (des), exp, TRUE,
                     tok, tok, tok)
     ELSE
+       IF StrictTypeAssignment
+       THEN
+          BuildRange (InitTypesIndrXCheck (tok, des, exp))
+       END ;
        t := MakeTemporary (tok, RightValue) ;
        PutVar (t, GetSType (exp)) ;
        GenQuadOtok (tok, IndrXOp, t, GetSType (exp), exp, TRUE,
                     tok, tok, tok) ;
!       GenQuadOtok (tok, BecomesOp, des, NulSym, doVal (GetSType (des), t), TRUE,
                     tok, UnknownTokenNo, tok)
     END
  END doIndrX ;
*************** BEGIN
*** 11295,11306 ****
                     n1, n2)
     ELSE
        (* this checks the types are compatible, not the data contents.  *)
!       BuildRange (InitTypesAssignmentCheck (tokno, currentProc, actualVal))
     END
  END CheckReturnType ;
  
  
  (*
     BuildReturn - Builds the Return part of the procedure.
                   tokreturn is the location of the RETURN keyword.
                   The Stack is expected to contain:
--- 11295,11335 ----
                     n1, n2)
     ELSE
        (* this checks the types are compatible, not the data contents.  *)
!       BuildRange (InitTypesReturnTypeCheck (tokno, currentProc, actualVal))
     END
  END CheckReturnType ;
  
  
  (*
+    BuildReturnLower - check the return type and value to ensure type
+                       compatibility and no range overflow will occur.
+ *)
+ 
+ PROCEDURE BuildReturnLower (tokcombined, tokexpr: CARDINAL; e1, t1: CARDINAL) ;
+ VAR
+    e2, t2: CARDINAL ;
+ BEGIN
+    (* This will check that the type returned is compatible with
+       the formal return type of the procedure.  *)
+    CheckReturnType (tokcombined, CurrentProc, e1, t1) ;
+    (* Dereference LeftValue if necessary.  *)
+    IF GetMode (e1) = LeftValue
+    THEN
+       t2 := GetSType (CurrentProc) ;
+       e2 := MakeTemporary (tokexpr, RightValue) ;
+       PutVar(e2, t2) ;
+       CheckPointerThroughNil (tokexpr, e1) ;
+       doIndrX (tokexpr, e2, e1) ;
+       e1 := e2
+    END ;
+    (* Here we check the data contents to ensure no overflow.  *)
+    BuildRange (InitReturnRangeCheck (tokcombined, CurrentProc, e1)) ;
+    GenQuadOtok (tokcombined, ReturnValueOp, e1, NulSym, CurrentProc, FALSE,
+                 tokcombined, UnknownTokenNo, GetDeclaredMod (CurrentProc))
+ END BuildReturnLower ;
+ 
+ 
+ (*
     BuildReturn - Builds the Return part of the procedure.
                   tokreturn is the location of the RETURN keyword.
                   The Stack is expected to contain:
*************** PROCEDURE BuildReturn (tokreturn: CARDIN
*** 11319,11325 ****
  VAR
     tokcombined,
     tokexpr    : CARDINAL ;
-    e2, t2,
     e1, t1,
     t, f,
     Des        : CARDINAL ;
--- 11348,11353 ----
*************** BEGIN
*** 11339,11364 ****
     tokcombined := MakeVirtualTok (tokreturn, tokreturn, tokexpr) ;
     IF e1 # NulSym
     THEN
!       (* this will check that the type returned is compatible with
!          the formal return type of the procedure.  *)
!       CheckReturnType (tokcombined, CurrentProc, e1, t1) ;
!       (* dereference LeftValue if necessary *)
!       IF GetMode (e1) = LeftValue
        THEN
!          t2 := GetSType (CurrentProc) ;
!          e2 := MakeTemporary (tokexpr, RightValue) ;
!          PutVar(e2, t2) ;
!          CheckPointerThroughNil (tokexpr, e1) ;
!          doIndrX (tokexpr, e2, e1) ;
! 	 (* here we check the data contents to ensure no overflow.  *)
!          BuildRange (InitReturnRangeCheck (tokcombined, CurrentProc, e2)) ;
!          GenQuadOtok (tokcombined, ReturnValueOp, e2, NulSym, CurrentProc, FALSE,
!                       tokcombined, UnknownTokenNo, GetDeclaredMod (CurrentProc))
        ELSE
! 	 (* here we check the data contents to ensure no overflow.  *)
!          BuildRange (InitReturnRangeCheck (tokcombined, CurrentProc, e1)) ;
!          GenQuadOtok (tokcombined, ReturnValueOp, e1, NulSym, CurrentProc, FALSE,
!                       tokcombined, UnknownTokenNo, GetDeclaredMod (CurrentProc))
        END
     END ;
     GenQuadO (tokcombined, GotoOp, NulSym, NulSym, PopWord (ReturnStack), FALSE) ;
--- 11367,11384 ----
     tokcombined := MakeVirtualTok (tokreturn, tokreturn, tokexpr) ;
     IF e1 # NulSym
     THEN
!       (* Check we are in a procedure scope and that the procedure has a return type.  *)
!       IF CurrentProc = NulSym
        THEN
!          MetaErrorT0 (tokcombined,
!                       '{%1E} attempting to return a value when not in a procedure scope')
!       ELSIF GetSType (CurrentProc) = NulSym
!       THEN
!          MetaErrorT1 (tokcombined,
!                       'attempting to return a value from procedure {%1Ea} which does not have a return type',
!                      CurrentProc)
        ELSE
!          BuildReturnLower (tokcombined, tokexpr, e1, t1)
        END
     END ;
     GenQuadO (tokcombined, GotoOp, NulSym, NulSym, PopWord (ReturnStack), FALSE) ;
*************** END StressStack ;
*** 16061,16072 ****
--- 16081,16135 ----
  
  
  (*
+    gdbhook - a debugger convenience hook.
+ *)
+ 
+ PROCEDURE gdbhook ;
+ END gdbhook ;
+ 
+ 
+ (*
+    BreakWhenQuadCreated - to be called interactively by gdb.
+ *)
+ 
+ PROCEDURE BreakWhenQuadCreated (quad: CARDINAL) ;
+ BEGIN
+    BreakQuad := quad
+ END BreakWhenQuadCreated ;
+ 
+ 
+ (*
+    CheckBreak - if quad = BreakQuad then call gdbhook.
+ *)
+ 
+ PROCEDURE CheckBreak (quad: CARDINAL) ;
+ BEGIN
+    IF quad = BreakQuad
+    THEN
+       gdbhook
+    END
+ END CheckBreak ;
+ 
+ 
+ (*
     Init - initialize the M2Quads module, all the stacks, all the lists
            and the quads list.
  *)
  
  PROCEDURE Init ;
  BEGIN
+    BreakWhenQuadCreated (0) ;  (* Disable the intereactive quad watch.  *)
+    (* To examine the quad table when a quad is created run cc1gm2 from gdb
+       and set a break point on gdbhook.
+       (gdb) break gdbhook
+       (gdb) run
+       Now below interactively call BreakWhenQuadCreated with the quad
+       under investigation.  *)
+    gdbhook ;
+    (* Now is the time to interactively call gdb, for example:
+       (gdb) print BreakWhenQuadCreated (1234)
+       (gdb) cont
+       and you will arrive at gdbhook when this quad is created.  *)
     LogicalOrTok := MakeKey('_LOR') ;
     LogicalAndTok := MakeKey('_LAND') ;
     LogicalXorTok := MakeKey('_LXOR') ;
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/M2Range.def gcc-15-20250719/gcc/m2/gm2-compiler/M2Range.def
*** gcc-15-20250712/gcc/m2/gm2-compiler/M2Range.def	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/M2Range.def	Sat Jul 19 22:32:15 2025
*************** PROCEDURE InitTypesExpressionCheck (tokn
*** 291,296 ****
--- 291,314 ----
  
  
  (*
+    InitTypesIndrXCheck - checks to see that the types of d and e
+                          are assignment compatible.  The type checking
+                          will dereference *e during the type check.
+                          d = *e.
+ *)
+ 
+ PROCEDURE InitTypesIndrXCheck (tokno: CARDINAL; d, e: CARDINAL) : CARDINAL ;
+ 
+ 
+ (*
+    InitTypesReturnTypeCheck - checks to see that the type of val can
+                                    be returned from func.
+ *)
+ 
+ PROCEDURE InitTypesReturnTypeCheck (tokno: CARDINAL; func, val: CARDINAL) : CARDINAL ;
+ 
+ 
+ (*
     InitCaseBounds - creates a case bound range check.
  *)
  
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/M2Range.mod gcc-15-20250719/gcc/m2/gm2-compiler/M2Range.mod
*** gcc-15-20250712/gcc/m2/gm2-compiler/M2Range.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/M2Range.mod	Sat Jul 19 22:32:15 2025
*************** FROM M2Debug IMPORT Assert ;
*** 58,64 ****
  FROM Indexing IMPORT Index, InitIndex, InBounds, PutIndice, GetIndice ;
  FROM Storage IMPORT ALLOCATE ;
  FROM M2ALU IMPORT PushIntegerTree, PushInt, ConvertToInt, Equ, Gre, Less, GreEqu ;
! FROM M2Options IMPORT VariantValueChecking, CaseEnumChecking, GetPIM ;
  
  FROM M2Error IMPORT Error, InternalError, ErrorFormat0, ErrorFormat1, ErrorFormat2, FlushErrors,
                      GetAnnounceScope ;
--- 58,64 ----
  FROM Indexing IMPORT Index, InitIndex, InBounds, PutIndice, GetIndice ;
  FROM Storage IMPORT ALLOCATE ;
  FROM M2ALU IMPORT PushIntegerTree, PushInt, ConvertToInt, Equ, Gre, Less, GreEqu ;
! FROM M2Options IMPORT VariantValueChecking, CaseEnumChecking, GetPIM, StrictTypeAssignment ;
  
  FROM M2Error IMPORT Error, InternalError, ErrorFormat0, ErrorFormat1, ErrorFormat2, FlushErrors,
                      GetAnnounceScope ;
*************** FROM M2Check IMPORT ParameterTypeCompati
*** 91,97 ****
  
  FROM M2Base IMPORT Nil, IsRealType, GetBaseTypeMinMax,
                     Cardinal, Integer, ZType, IsComplexType,
-                    IsAssignmentCompatible,
                     IsExpressionCompatible,
                     IsParameterCompatible,
                     ExceptionAssign,
--- 91,96 ----
*************** FROM M2CaseList IMPORT CaseBoundsResolve
*** 115,121 ****
  TYPE
     TypeOfRange = (assignment, returnassignment, subrangeassignment,
                    inc, dec, incl, excl, shift, rotate,
!                   typeexpr, typeassign, typeparam, paramassign,
                    staticarraysubscript,
                    dynamicarraysubscript,
                    forloopbegin, forloopto, forloopend,
--- 114,122 ----
  TYPE
     TypeOfRange = (assignment, returnassignment, subrangeassignment,
                    inc, dec, incl, excl, shift, rotate,
!                   typeindrx, typeexpr, typeassign, typeparam,
!                   typereturn,
!                   paramassign,
                    staticarraysubscript,
                    dynamicarraysubscript,
                    forloopbegin, forloopto, forloopend,
*************** BEGIN
*** 289,297 ****
     excl                 : RETURN( ExceptionExcl ) |
     shift                : RETURN( ExceptionShift ) |
     rotate               : RETURN( ExceptionRotate ) |
!    typeassign           : InternalError ('not expecting this case value') |
!    typeparam            : InternalError ('not expecting this case value') |
!    typeexpr             : InternalError ('not expecting this case value') |
     paramassign          : RETURN( ExceptionParameterBounds ) |
     staticarraysubscript : RETURN( ExceptionStaticArray ) |
     dynamicarraysubscript: RETURN( ExceptionDynamicArray ) |
--- 290,299 ----
     excl                 : RETURN( ExceptionExcl ) |
     shift                : RETURN( ExceptionShift ) |
     rotate               : RETURN( ExceptionRotate ) |
!    typeassign,
!    typeparam,
!    typeexpr,
!    typeindrx            : InternalError ('not expecting this case value') |
     paramassign          : RETURN( ExceptionParameterBounds ) |
     staticarraysubscript : RETURN( ExceptionStaticArray ) |
     dynamicarraysubscript: RETURN( ExceptionDynamicArray ) |
*************** END InitRotateCheck ;
*** 822,828 ****
  
  
  (*
!    InitTypesAssignmentCheck - checks to see that the types of, d, and, e,
                                are assignment compatible.
  *)
  
--- 824,830 ----
  
  
  (*
!    InitTypesAssignmentCheck - checks to see that the types of d and e
                                are assignment compatible.
  *)
  
*************** END InitTypesAssignmentCheck ;
*** 837,842 ****
--- 839,876 ----
  
  
  (*
+    InitTypesIndrXCheck - checks to see that the types of d and e
+                          are assignment compatible.  The type checking
+                          will dereference *e during the type check.
+                          d = *e.
+ *)
+ 
+ PROCEDURE InitTypesIndrXCheck (tokno: CARDINAL; d, e: CARDINAL) : CARDINAL ;
+ VAR
+    r: CARDINAL ;
+ BEGIN
+    r := InitRange () ;
+    Assert (PutRangeNoLow (tokno, GetIndice (RangeIndex, r), typeindrx, d, e) # NIL) ;
+    RETURN r
+ END InitTypesIndrXCheck ;
+ 
+ 
+ (*
+    InitTypesReturnTypeCheck - checks to see that the types of des and func
+                               are assignment compatible.
+ *)
+ 
+ PROCEDURE InitTypesReturnTypeCheck (tokno: CARDINAL; func, val: CARDINAL) : CARDINAL ;
+ VAR
+    r: CARDINAL ;
+ BEGIN
+    r := InitRange () ;
+    Assert (PutRangeNoLow (tokno, GetIndice (RangeIndex, r), typereturn, func, val) # NIL) ;
+    RETURN r
+ END InitTypesReturnTypeCheck ;
+ 
+ 
+ (*
     InitTypesParameterCheck - checks to see that the types of, d,
                               and, e, are parameter compatible.
  *)
*************** BEGIN
*** 1219,1227 ****
        excl                 : RETURN( ExceptionExcl#NulSym ) |
        shift                : RETURN( ExceptionShift#NulSym ) |
        rotate               : RETURN( ExceptionRotate#NulSym ) |
!       typeassign           : RETURN( FALSE ) |
!       typeparam            : RETURN( FALSE ) |
!       typeexpr             : RETURN( FALSE ) |
        paramassign          : RETURN( ExceptionParameterBounds#NulSym ) |
        staticarraysubscript : RETURN( ExceptionStaticArray#NulSym ) |
        dynamicarraysubscript: RETURN( ExceptionDynamicArray#NulSym ) |
--- 1253,1263 ----
        excl                 : RETURN( ExceptionExcl#NulSym ) |
        shift                : RETURN( ExceptionShift#NulSym ) |
        rotate               : RETURN( ExceptionRotate#NulSym ) |
!       typereturn,
!       typeassign,
!       typeparam,
!       typeexpr,
!       typeindrx            : RETURN( FALSE ) |
        paramassign          : RETURN( ExceptionParameterBounds#NulSym ) |
        staticarraysubscript : RETURN( ExceptionStaticArray#NulSym ) |
        dynamicarraysubscript: RETURN( ExceptionDynamicArray#NulSym ) |
*************** END HandlerExists ;
*** 1246,1252 ****
  
  
  (*
!    FoldAssignment -
  *)
  
  PROCEDURE FoldAssignment (tokenno: CARDINAL; q: CARDINAL; r: CARDINAL) ;
--- 1282,1290 ----
  
  
  (*
!    FoldAssignment - attempts to fold the range violation checks.
!                     It does not issue errors on type violations as that
!                     is performed by FoldTypeAssign.
  *)
  
  PROCEDURE FoldAssignment (tokenno: CARDINAL; q: CARDINAL; r: CARDINAL) ;
*************** BEGIN
*** 1259,1265 ****
        TryDeclareConstant (exprtok, expr) ;
        IF desLowestType # NulSym
        THEN
!          IF AssignmentTypeCompatible (tokenno, "", des, expr)
           THEN
              IF GccKnowsAbout (expr) AND IsConst (expr) AND
                 GetMinMax (tokenno, desLowestType, min, max)
--- 1297,1303 ----
        TryDeclareConstant (exprtok, expr) ;
        IF desLowestType # NulSym
        THEN
!          IF AssignmentTypeCompatible (tokenno, "", des, expr, FALSE)
           THEN
              IF GccKnowsAbout (expr) AND IsConst (expr) AND
                 GetMinMax (tokenno, desLowestType, min, max)
*************** BEGIN
*** 1275,1280 ****
--- 1313,1320 ----
                 END
              END
           ELSE
+             (* We do not issue an error if these types are incompatible here
+                as this is done by FoldTypeAssign.  *)
              SubQuad (q)
           END
        END
*************** END FoldRotate ;
*** 1757,1777 ****
  
  
  (*
     FoldTypeAssign -
  *)
  
  PROCEDURE FoldTypeAssign (q: CARDINAL; tokenNo: CARDINAL; des, expr: CARDINAL; r: CARDINAL) ;
  VAR
     exprType: CARDINAL ;
  BEGIN
!    IF IsProcedure(expr)
     THEN
        exprType := expr
     ELSE
!       exprType := GetType(expr)
     END ;
! 
!    IF IsAssignmentCompatible (GetType(des), exprType)
     THEN
        SubQuad(q)
     ELSE
--- 1797,1890 ----
  
  
  (*
+    FoldTypeReturnFunc - checks to see that val can be returned from func.
+ *)
+ 
+ PROCEDURE FoldTypeReturnFunc (q: CARDINAL; tokenNo: CARDINAL; func, val: CARDINAL; r: CARDINAL) ;
+ VAR
+    valType,
+    returnType: CARDINAL ;
+ BEGIN
+    returnType := GetType (func) ;
+    IF returnType = NulSym
+    THEN
+       IF NOT reportedError (r)
+       THEN
+          MetaErrorsT2 (tokenNo,
+                        'procedure {%1Da} is not a procedure function',
+                        '{%2ad} cannot be returned from {%1Da}',
+                        func, val) ;
+          SubQuad(q)
+       END
+    ELSE
+       valType := val ;
+       IF IsVar (val) AND (GetMode (val) = LeftValue)
+       THEN
+          valType := GetType (val)
+       END ;
+       IF AssignmentTypeCompatible (tokenNo, "", returnType, valType, FALSE)
+       THEN
+          SubQuad (q)
+       ELSE
+          IF NOT reportedError (r)
+          THEN
+             MetaErrorsT2 (tokenNo,
+                           'the return type {%1Etad} used in procedure {%1Da}',
+                           'is incompatible with the returned expression {%1ad}}',
+                           func, val) ;
+             setReported (r) ;
+             FlushErrors
+          END
+       END
+    END
+ END FoldTypeReturnFunc ;
+ 
+ 
+ (*
     FoldTypeAssign -
  *)
  
  PROCEDURE FoldTypeAssign (q: CARDINAL; tokenNo: CARDINAL; des, expr: CARDINAL; r: CARDINAL) ;
+ BEGIN
+    IF NOT reportedError (r)
+    THEN
+       IF AssignmentTypeCompatible (tokenNo,
+                                    'assignment designator {%1Ea} {%1ta:of type {%1ta}}' +
+                                    ' cannot be assigned with' +
+                                    ' {%2ad: a {%2td} {%2ad}}{!%2ad: {%2ad} of type {%2tad}}',
+                                    des, expr, TRUE)
+       THEN
+          SubQuad (q)
+       ELSE
+          setReported (r) ;
+          FlushErrors
+       END
+    END
+ END FoldTypeAssign ;
+ 
+ 
+ (*
+    FoldTypeIndrX - check to see that des = *expr is type compatible.
+ *)
+ 
+ PROCEDURE FoldTypeIndrX (q: CARDINAL; tokenNo: CARDINAL; des, expr: CARDINAL; r: CARDINAL) ;
  VAR
+    desType,
     exprType: CARDINAL ;
  BEGIN
!    (* Need to skip over a variable or temporary in des and expr so
!       long as expr is not a procedure.  In the case of des = *expr,
!       both expr and des will be variables due to the property of
!       indirection.  *)
!    desType := GetType (des) ;
!    IF IsProcedure (expr)
     THEN
+       (* Must not GetType for a procedure as it gives the return type.  *)
        exprType := expr
     ELSE
!       exprType := GetType (expr)
     END ;
!    IF AssignmentTypeCompatible (tokenNo, "", GetType (des), GetType (expr), FALSE)
     THEN
        SubQuad(q)
     ELSE
*************** BEGIN
*** 1785,1798 ****
                            des, expr) ;
           ELSE
              MetaErrorT3 (tokenNo,
!                          'assignment designator {%1Ea} {%1ta:of type {%1ta}} {%1d:is a {%1d}} and expression {%2a} {%3ad:of type {%3ad}} are incompatible',
                           des, expr, exprType)
           END ;
           setReported (r) ;
           FlushErrors
        END
     END
! END FoldTypeAssign ;
  
  
  (*
--- 1898,1913 ----
                            des, expr) ;
           ELSE
              MetaErrorT3 (tokenNo,
!                          'assignment designator {%1Ea} {%1ta:of type {%1ta}}' +
!                          ' {%1d:is a {%1d}} and expression {%2a} {%3ad:of type' +
!                          ' {%3ad}} are incompatible',
                           des, expr, exprType)
           END ;
           setReported (r) ;
           FlushErrors
        END
     END
! END FoldTypeIndrX ;
  
  
  (*
*************** END FoldTypeExpr ;
*** 1859,1893 ****
  *)
  
  PROCEDURE CodeTypeAssign (tokenNo: CARDINAL; des, expr: CARDINAL; r: CARDINAL) ;
  VAR
!    exprType: CARDINAL ;
  BEGIN
!    IF IsProcedure(expr)
     THEN
!       exprType := expr
     ELSE
!       exprType := GetType(expr)
!    END ;
!    IF NOT IsAssignmentCompatible(GetType(des), exprType)
     THEN
        IF NOT reportedError (r)
        THEN
!          IF IsProcedure(des)
           THEN
!             MetaErrorsT2(tokenNo,
!                          'the return type {%1Etad} declared in procedure {%1Da}',
!                          'is incompatible with the returned expression {%2EUa} {%2tad:of type {%2tad}}',
!                          des, expr) ;
           ELSE
!             MetaErrorT2(tokenNo,
!                         'assignment designator {%1Ea} {%1ta:of type {%1ta}} {%1d:is a {%1d}} and expression {%2a} {%2tad:of type {%2tad}} are incompatible',
!                         des, expr)
           END ;
           setReported (r)
        END
        (* FlushErrors *)
     END
! END CodeTypeAssign ;
  
  
  (*
--- 1974,2063 ----
  *)
  
  PROCEDURE CodeTypeAssign (tokenNo: CARDINAL; des, expr: CARDINAL; r: CARDINAL) ;
+ BEGIN
+    IF NOT AssignmentTypeCompatible (tokenNo, "", des, expr, FALSE)
+    THEN
+       IF NOT reportedError (r)
+       THEN
+          MetaErrorT2 (tokenNo,
+                       'assignment designator {%1Ea} {%1ta:of type {%1ta}} {%1d:is a {%1d}} and expression {%2a} {%2tad:of type {%2tad}} are incompatible',
+                       des, expr)
+       END ;
+       setReported (r)
+    END
+ END CodeTypeAssign ;
+ 
+ 
+ (*
+    CodeTypeReturnFunc -
+ *)
+ 
+ PROCEDURE CodeTypeReturnFunc (tokenNo: CARDINAL; func, val: CARDINAL; r: CARDINAL) ;
  VAR
!    valType,
!    returnType: CARDINAL ;
  BEGIN
!    returnType := GetType (func) ;
!    IF returnType = NulSym
     THEN
!       IF NOT reportedError (r)
!       THEN
!          MetaErrorsT2 (tokenNo,
!                        'procedure {%1Da} is not a procedure function',
!                        '{%2ad} cannot be returned from {%1Da}',
!                        func, val) ;
!       END
     ELSE
!       valType := val ;
!       IF IsVar (val) AND (GetMode (val) = LeftValue)
!       THEN
!          valType := GetType (val)
!       END ;
!       IF NOT AssignmentTypeCompatible (tokenNo, "", returnType, valType, FALSE)
!       THEN
!          IF NOT reportedError (r)
!          THEN
!             MetaErrorsT2 (tokenNo,
!                           'the return type {%1Etad} used in procedure function {%1Da}',
!                           'is incompatible with the returned expression {%2EUa} {%2tad:of type {%2tad}}',
!                           func, val)
!          END
!       END
!    END
! END CodeTypeReturnFunc ;
! 
! 
! (*
!    CodeTypeIndrX - checks that des = *expr is type compatible and generates an error if they
!                    are not compatible.  It skips over the LValue type so that to allow
!                    the error messages to pick up the source variable name rather than
!                    a temporary name or vague name 'expression'.
! *)
! 
! PROCEDURE CodeTypeIndrX (tokenNo: CARDINAL; des, expr: CARDINAL; r: CARDINAL) ;
! BEGIN
!    IF NOT AssignmentTypeCompatible (tokenNo, "", GetType (des), GetType (expr), FALSE)
     THEN
        IF NOT reportedError (r)
        THEN
!          IF IsProcedure (des)
           THEN
!             MetaErrorsT2 (tokenNo,
!                           'the return type {%1Etad} declared in procedure {%1Da}',
!                           'is incompatible with the returned expression {%2EUa} {%2tad:of type {%2tad}}',
!                           des, expr) ;
           ELSE
!             MetaErrorT2 (tokenNo,
!                          'assignment designator {%1Ea} {%1ta:of type {%1ta}}' +
!                          ' {%1d:is a {%1d}} and expression {%2a}' +
!                          ' {%2tad:of type {%2tad}} are incompatible',
!                          des, expr)
           END ;
           setReported (r)
        END
        (* FlushErrors *)
     END
! END CodeTypeIndrX ;
  
  
  (*
*************** BEGIN
*** 1941,1949 ****
        THEN
           CASE type OF
  
!          typeassign:  FoldTypeAssign(q, tokenNo, des, expr, r) |
!          typeparam:   FoldTypeParam(q, tokenNo, des, expr, procedure, paramNo, r) |
!          typeexpr:    FoldTypeExpr(q, tokenNo, des, expr, strict, isin, r)
  
           ELSE
              InternalError ('not expecting to reach this point')
--- 2111,2121 ----
        THEN
           CASE type OF
  
!          typeassign:  FoldTypeAssign (q, tokenNo, des, expr, r) |
!          typeparam :  FoldTypeParam (q, tokenNo, des, expr, procedure, paramNo, r) |
!          typeexpr  :  FoldTypeExpr (q, tokenNo, des, expr, strict, isin, r) |
!          typeindrx :  FoldTypeIndrX (q, tokenNo, des, expr, r) |
!          typereturn:  FoldTypeReturnFunc (q, tokenNo, des, expr, r)
  
           ELSE
              InternalError ('not expecting to reach this point')
*************** BEGIN
*** 1974,1982 ****
        THEN
           CASE type OF
  
!          typeassign:  CodeTypeAssign(tokenNo, des, expr, r) |
!          typeparam:   CodeTypeParam(tokenNo, des, expr, procedure, paramNo) |
!          typeexpr:    CodeTypeExpr(tokenNo, des, expr, strict, isin, r)
  
           ELSE
              InternalError ('not expecting to reach this point')
--- 2146,2156 ----
        THEN
           CASE type OF
  
!          typeassign:  CodeTypeAssign (tokenNo, des, expr, r) |
!          typeparam :  CodeTypeParam (tokenNo, des, expr, procedure, paramNo) |
!          typeexpr  :  CodeTypeExpr (tokenNo, des, expr, strict, isin, r) |
!          typeindrx :  CodeTypeIndrX (tokenNo, des, expr, r) |
!          typereturn:  CodeTypeReturnFunc (tokenNo, des, expr, r)
  
           ELSE
              InternalError ('not expecting to reach this point')
*************** BEGIN
*** 2005,2011 ****
     success := TRUE ;
     WITH p^ DO
        combinedtok := MakeVirtual2Tok (destok, exprtok) ;
!       IF NOT AssignmentTypeCompatible (combinedtok, "", des, expr)
        THEN
           MetaErrorT2 (combinedtok,
                        'type incompatibility between {%1Et} and {%2t} detected during the assignment of the designator {%1a} to the first expression {%2a} in the {%kFOR} loop',
--- 2179,2185 ----
     success := TRUE ;
     WITH p^ DO
        combinedtok := MakeVirtual2Tok (destok, exprtok) ;
!       IF NOT AssignmentTypeCompatible (combinedtok, "", des, expr, TRUE)
        THEN
           MetaErrorT2 (combinedtok,
                        'type incompatibility between {%1Et} and {%2t} detected during the assignment of the designator {%1a} to the first expression {%2a} in the {%kFOR} loop',
*************** BEGIN
*** 2419,2427 ****
        excl                 :  FoldExcl(tokenno, quad, range) |
        shift                :  FoldShift(tokenno, quad, range) |
        rotate               :  FoldRotate(tokenno, quad, range) |
!       typeassign           :  FoldTypeCheck(tokenno, quad, range) |
!       typeparam            :  FoldTypeCheck(tokenno, quad, range) |
!       typeexpr             :  FoldTypeCheck(tokenno, quad, range) |
        paramassign          :  FoldParameterAssign(tokenno, quad, range) |
        staticarraysubscript :  FoldStaticArraySubscript(tokenno, quad, range) |
        dynamicarraysubscript:  FoldDynamicArraySubscript(tokenno, quad, range) |
--- 2593,2603 ----
        excl                 :  FoldExcl(tokenno, quad, range) |
        shift                :  FoldShift(tokenno, quad, range) |
        rotate               :  FoldRotate(tokenno, quad, range) |
!       typereturn,
!       typeassign,
!       typeparam,
!       typeexpr,
!       typeindrx            :  FoldTypeCheck (tokenno, quad, range) |
        paramassign          :  FoldParameterAssign(tokenno, quad, range) |
        staticarraysubscript :  FoldStaticArraySubscript(tokenno, quad, range) |
        dynamicarraysubscript:  FoldDynamicArraySubscript(tokenno, quad, range) |
*************** BEGIN
*** 3557,3562 ****
--- 3733,3740 ----
        typeassign           :  s := NIL |
        typeparam            :  s := NIL |
        typeexpr             :  s := NIL |
+       typeindrx            :  s := InitString ('assignment between designator {%1ad} and {%2ad} is incompatible') |
+       typereturn           :  s := InitString ('the value {%2ad} returned from procedure function {%1a} is type incompatible, expecting {%1tad} rather than a {%2tad}') |
        paramassign          :  s := InitString('if this call is executed then the actual parameter {%2Wa} will be out of range of the {%3N} formal parameter {%1a}') |
        staticarraysubscript :  s := InitString('if this access to the static array {%1Wa:{%2a:{%1a}[{%2a}]}} is ever made then the index will be out of bounds in the {%3N} array subscript') |
        dynamicarraysubscript:  s := InitString('if this access to the dynamic array {%1Wa:{%2a:{%1a}[{%2a}]}} is ever made then the index will be out of bounds in the {%3N} array subscript') |
*************** BEGIN
*** 3605,3613 ****
        excl                 :  CodeInclExcl (tokenNo, r, function, message) |
        shift,
        rotate               :  CodeShiftRotate (tokenNo, r, function, message) |
!       typeassign           :  CodeTypeCheck (tokenNo, r) |
!       typeparam            :  CodeTypeCheck (tokenNo, r) |
!       typeexpr             :  CodeTypeCheck (tokenNo, r) |
        staticarraysubscript :  CodeStaticArraySubscript (tokenNo, r, function, message) |
        dynamicarraysubscript:  CodeDynamicArraySubscript (tokenNo, r, function, message) |
        forloopbegin         :  CodeForLoopBegin (tokenNo, r, function, message) |
--- 3783,3793 ----
        excl                 :  CodeInclExcl (tokenNo, r, function, message) |
        shift,
        rotate               :  CodeShiftRotate (tokenNo, r, function, message) |
!       typeassign,
!       typeparam,
!       typeexpr,
!       typeindrx,
!       typereturn           :  CodeTypeCheck (tokenNo, r) |
        staticarraysubscript :  CodeStaticArraySubscript (tokenNo, r, function, message) |
        dynamicarraysubscript:  CodeDynamicArraySubscript (tokenNo, r, function, message) |
        forloopbegin         :  CodeForLoopBegin (tokenNo, r, function, message) |
*************** BEGIN
*** 3743,3748 ****
--- 3923,3930 ----
        rotate               :  WriteString('rotate(') ; WriteOperand(des) ; WriteString(', ') ; WriteOperand(expr) |
        typeexpr             :  WriteString('expr compatible (') ; WriteOperand(des) ; WriteString(', ') ; WriteOperand(expr) |
        typeassign           :  WriteString('assignment compatible (') ; WriteOperand(des) ; WriteString(', ') ; WriteOperand(expr) |
+       typeindrx            :  WriteString('indrx compatible (') ; WriteOperand(des) ; WriteString(', ') ; WriteOperand(expr) |
+       typereturn           :  WriteString('return compatible (') ; WriteOperand(des) ; WriteString(', ') ; WriteOperand(expr) |
        typeparam            :  WriteString('parameter compatible (') ; WriteOperand(des) ; WriteString(', ') ; WriteOperand(expr) |
        paramassign          :  WriteString('parameter range (') ; WriteOperand(des) ; WriteString(', ') ; WriteOperand(expr) |
        staticarraysubscript :  WriteString('staticarraysubscript(') ; WriteOperand(des) ; WriteString(', ') ; WriteOperand(expr) |
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/P2Build.bnf gcc-15-20250719/gcc/m2/gm2-compiler/P2Build.bnf
*** gcc-15-20250712/gcc/m2/gm2-compiler/P2Build.bnf	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/P2Build.bnf	Sat Jul 19 22:32:15 2025
*************** see <https://www.gnu.org/licenses/>.  *)
*** 46,52 ****
  IMPLEMENTATION MODULE P2Build ;
  
  FROM M2LexBuf IMPORT currentstring, currenttoken, GetToken, InsertToken,
!                      InsertTokenAndRewind, GetTokenNo, MakeVirtual2Tok ;
  
  FROM M2MetaError IMPORT MetaErrorStringT0, MetaErrorT1 ;
  FROM NameKey IMPORT NulName, Name, makekey, MakeKey ;
--- 46,53 ----
  IMPLEMENTATION MODULE P2Build ;
  
  FROM M2LexBuf IMPORT currentstring, currenttoken, GetToken, InsertToken,
!                      InsertTokenAndRewind, GetTokenNo, MakeVirtual2Tok,
! 		     MakeVirtualTok ;
  
  FROM M2MetaError IMPORT MetaErrorStringT0, MetaErrorT1 ;
  FROM NameKey IMPORT NulName, Name, makekey, MakeKey ;
*************** FROM SymbolTable IMPORT MakeGnuAsm, PutG
*** 128,140 ****
                          PutGnuAsmOutput, PutGnuAsmTrash, PutGnuAsmVolatile,
                          MakeRegInterface,
                          PutRegInterface, GetRegInterface,
!                         GetSymName, GetType, MakeConstLit,
                          NulSym,
!                         StartScope, EndScope,
                          PutIncluded,
                          PutExceptionFinally, PutExceptionBlock, GetCurrentScope,
                          IsVarParam, IsProcedure, IsDefImp, IsModule,
!                         IsRecord, IsAModula2Type,
                          RequestSym ;
  
  IMPORT M2Error ;
--- 129,141 ----
                          PutGnuAsmOutput, PutGnuAsmTrash, PutGnuAsmVolatile,
                          MakeRegInterface,
                          PutRegInterface, GetRegInterface,
!                         GetSymName, GetType, MakeConstLit, IsProcType,
                          NulSym,
!                         StartScope, EndScope, GetCurrentModule,
                          PutIncluded,
                          PutExceptionFinally, PutExceptionBlock, GetCurrentScope,
                          IsVarParam, IsProcedure, IsDefImp, IsModule,
!                         IsRecord, IsAModula2Type, IsImported,
                          RequestSym ;
  
  IMPORT M2Error ;
*************** BEGIN
*** 450,455 ****
--- 451,504 ----
     Expect(realtok, stopset0, stopset1, stopset2)
  END Real ;
  
+ 
+ (*
+    CheckModuleQualident - check to see if the beginning ident of the qualident is an
+                           imported module.
+ *)
+ 
+ PROCEDURE CheckModuleQualident (stopset0: SetOfStop0;
+                                 stopset1: SetOfStop1;
+ 				stopset2: SetOfStop2) ;
+ VAR
+    name         : Name ;
+    init,
+    nextLevel,
+    tok, tokstart: CARDINAL ;
+ BEGIN
+    PopTtok (name, tokstart) ;
+    tok := tokstart ;
+    init := RequestSym (tok, name) ;
+    IF IsImported (GetCurrentModule (), init) AND (IsDefImp (init) OR IsModule (init))
+    THEN
+       WHILE IsDefImp (init) OR IsModule (init) DO
+          Expect (periodtok, stopset0, stopset1, stopset2 + SetOfStop2{identtok}) ;
+          StartScope (init) ;
+          Ident (stopset0, stopset1, stopset2) ;
+ 	 PopTtok (name, tok) ;
+          nextLevel := RequestSym (tok, name) ;
+          EndScope ;
+ 	 init := nextLevel
+       END ;
+       IF tok#tokstart
+       THEN
+          tok := MakeVirtualTok (tokstart, tokstart, tok)
+       END ;
+       IF IsProcedure (init) OR IsProcType (init)
+       THEN
+          PushTtok (init, tok)
+       ELSE
+          Annotate ("%1s(%1d)|%1s(%1d)||qualident|type") ;
+          PushTFtok (init, GetType (init), tok) ;
+       END ;
+       PutIncluded (init)
+    ELSE
+       PushTFtok (init, GetType (init), tok) ;
+       Annotate ("%1s(%1d)|%1s(%1d)||qualident|type")
+    END
+ END CheckModuleQualident ;
+ 
+ 
  % module P2Build end
  END P2Build.
  % rules
*************** ImplementationOrProgramModule := Impleme
*** 609,636 ****
  
  Number := Integer | Real =:
  
! Qualident :=                                                               % VAR name: Name ;
!                                                                                  Type, Sym, tok: CARDINAL ; %
!              Ident
                                                                             % IF IsAutoPushOn()
                                                                               THEN
!                                                                                 PopTtok(name, tok) ;
!                                                                                 Sym := RequestSym (tok, name) ;
!                                                                                 IF IsDefImp(Sym) OR IsModule(Sym)
!                                                                                 THEN
!                                                                                    Expect(periodtok, stopset0, stopset1, stopset2 + SetOfStop2{identtok}) ;
!                                                                                    StartScope(Sym) ;
!                                                                                    Qualident(stopset0, stopset1, stopset2) ;
!                                                                                    (* should we test for lack of ident? *)
!                                                                                    PopTFtok(Sym, Type, tok) ;
!                                                                                    PushTFtok(Sym, Type, tok) ;
!                                                                                    Annotate("%1s(%1d)|%1s(%1d)||qualident|type") ;
!                                                                                    EndScope ;
!                                                                                    PutIncluded(Sym)
!                                                                                 ELSE
!                                                                                    PushTFtok(Sym, GetType(Sym), tok) ;
!                                                                                    Annotate("%1s(%1d)|%1s(%1d)||qualident|type")
!                                                                                 END
                                                                               ELSE (* just parse qualident *) %
               { "." Ident }                                                 % END %
             =:
--- 658,667 ----
  
  Number := Integer | Real =:
  
! Qualident := Ident
                                                                             % IF IsAutoPushOn()
                                                                               THEN
!      										CheckModuleQualident (stopset0, stopset1, stopset2)
                                                                               ELSE (* just parse qualident *) %
               { "." Ident }                                                 % END %
             =:
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/P2SymBuild.mod gcc-15-20250719/gcc/m2/gm2-compiler/P2SymBuild.mod
*** gcc-15-20250712/gcc/m2/gm2-compiler/P2SymBuild.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/P2SymBuild.mod	Sat Jul 19 22:32:15 2025
*************** VAR
*** 1225,1231 ****
     Sym,
     Type     : CARDINAL ;
     name     : Name ;
!    tokno    : CARDINAL ;
  BEGIN
     (*
        Two cases
--- 1225,1232 ----
     Sym,
     Type     : CARDINAL ;
     name     : Name ;
!    nametokno,
!    typetokno: CARDINAL ;
  BEGIN
     (*
        Two cases
*************** BEGIN
*** 1234,1241 ****
        - when type with a name that is different to Name. In which case
          we create a new type.
     *)
!    PopTtok(Type, tokno) ;
!    PopT(name) ;
     IF Debugging
     THEN
        n1 := GetSymName(GetCurrentModule()) ;
--- 1235,1242 ----
        - when type with a name that is different to Name. In which case
          we create a new type.
     *)
!    PopTtok (Type, typetokno) ;
!    PopTtok (name, nametokno) ;
     IF Debugging
     THEN
        n1 := GetSymName(GetCurrentModule()) ;
*************** BEGIN
*** 1264,1274 ****
  
        *)
        (* WriteString('Blank name type') ; WriteLn ; *)
!       PushTFtok(Type, name, tokno) ;
        Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
     ELSIF IsError(Type)
     THEN
!       PushTFtok(Type, name, tokno) ;
        Annotate("%1s(%1d)|%2n|%3d||error type|error type name|token no")
     ELSIF GetSymName(Type)=name
     THEN
--- 1265,1275 ----
  
        *)
        (* WriteString('Blank name type') ; WriteLn ; *)
!       PushTFtok(Type, name, typetokno) ;
        Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
     ELSIF IsError(Type)
     THEN
!       PushTFtok(Type, name, typetokno) ;
        Annotate("%1s(%1d)|%2n|%3d||error type|error type name|token no")
     ELSIF GetSymName(Type)=name
     THEN
*************** BEGIN
*** 1276,1282 ****
        IF isunknown OR
           (NOT IsDeclaredIn(GetCurrentScope(), Type))
        THEN
!          Sym := MakeType(tokno, name) ;
           IF NOT IsError(Sym)
           THEN
              IF Sym=Type
--- 1277,1283 ----
        IF isunknown OR
           (NOT IsDeclaredIn(GetCurrentScope(), Type))
        THEN
!          Sym := MakeType (typetokno, name) ;
           IF NOT IsError(Sym)
           THEN
              IF Sym=Type
*************** BEGIN
*** 1295,1313 ****
                 CheckForEnumerationInCurrentModule(Type)
              END
           END ;
!          PushTFtok(Sym, name, tokno) ;
           Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
        ELSE
!          PushTFtok(Type, name, tokno) ;
           Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
        END
     ELSE
        (* example   TYPE a = CARDINAL *)
!       Sym := MakeType(tokno, name) ;
!       PutType(Sym, Type) ;
!       CheckForExportedImplementation(Sym) ;   (* May be an exported hidden type *)
!       PushTFtok(Sym, name, tokno) ;
!       Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
     END
  END BuildType ;
  
--- 1296,1318 ----
                 CheckForEnumerationInCurrentModule(Type)
              END
           END ;
!          PushTFtok(Sym, name, typetokno) ;
           Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
        ELSE
!          PushTFtok(Type, name, typetokno) ;
           Annotate("%1s(%1d)|%2n|%3d||type|type name|token no")
        END
     ELSE
        (* example   TYPE a = CARDINAL *)
!       Sym := MakeType (nametokno, name) ;
!       PutType (Sym, Type) ;
!       CheckForExportedImplementation (Sym) ;   (* May be an exported hidden type *)
!       PushTFtok (Sym, name, nametokno) ;
!       Annotate ("%1s(%1d)|%2n|%3d||type|type name|token no") ;
!       IF Debugging
!       THEN
!          MetaErrorT1 (nametokno, 'type pos {%1Wa}', Sym)
!       END
     END
  END BuildType ;
  
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/P3Build.bnf gcc-15-20250719/gcc/m2/gm2-compiler/P3Build.bnf
*** gcc-15-20250712/gcc/m2/gm2-compiler/P3Build.bnf	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/P3Build.bnf	Sat Jul 19 22:32:15 2025
*************** FROM SymbolTable IMPORT MakeGnuAsm, PutG
*** 166,179 ****
                          MakeRegInterface,
                          PutRegInterface,
                          IsRegInterface, IsGnuAsmVolatile, IsGnuAsm,
!                         GetCurrentModule,
                          GetSymName, GetType, SkipType,
                          NulSym,
                          StartScope, EndScope,
                          PutIncluded,
                          IsVarParam, IsProcedure, IsDefImp, IsModule, IsProcType,
                          IsRecord,
!                         RequestSym, IsExported,
                          GetSym, GetLocalSym ;
  
  FROM M2Batch IMPORT IsModuleKnown ;
--- 166,179 ----
                          MakeRegInterface,
                          PutRegInterface,
                          IsRegInterface, IsGnuAsmVolatile, IsGnuAsm,
!                         GetCurrentModule, IsInnerModule,
                          GetSymName, GetType, SkipType,
                          NulSym,
                          StartScope, EndScope,
                          PutIncluded,
                          IsVarParam, IsProcedure, IsDefImp, IsModule, IsProcType,
                          IsRecord,
!                         RequestSym, IsExported, IsImported,
                          GetSym, GetLocalSym ;
  
  FROM M2Batch IMPORT IsModuleKnown ;
*************** BEGIN
*** 468,473 ****
--- 468,536 ----
     Expect(realtok, stopset0, stopset1, stopset2)
  END Real ;
  
+ 
+ (*
+    PushTFQualident - push the result of the Qualident
+                      to the stack.  It checks to see if init
+ 		     is a procedure or proc type and if so
+ 		     it does not push the return type.
+ *)
+ 
+ PROCEDURE PushTFQualident (tok, tokstart: CARDINAL;
+                            init: CARDINAL) ;
+ BEGIN
+    IF tok#tokstart
+    THEN
+       tok := MakeVirtualTok (tokstart, tokstart, tok)
+    END ;
+    IF IsProcedure (init) OR IsProcType (init) OR IsModule (init) OR IsDefImp (init)
+    THEN
+       PushTtok (init, tok) ;
+       Annotate ("%1s(%1d)||qualident procedure/proctype") ;
+    ELSE
+       Annotate ("%1s(%1d)|%1s(%1d)||qualident|type") ;
+       PushTFtok (init, GetType (init), tok) ;
+    END
+ END PushTFQualident ;
+ 
+ 
+ (*
+    CheckModuleQualident - check to see if the beginning ident of the qualident is an
+                           imported module.
+ *)
+ 
+ PROCEDURE CheckModuleQualident (stopset0: SetOfStop0;
+                                 stopset1: SetOfStop1;
+ 				stopset2: SetOfStop2) ;
+ VAR
+    name         : Name ;
+    init,
+    nextLevel,
+    tok, tokstart: CARDINAL ;
+ BEGIN
+    PopTtok (name, tokstart) ;
+    tok := tokstart ;
+    init := RequestSym (tok, name) ;
+    IF (IsImported (GetCurrentModule (), init) AND IsDefImp (init)) OR
+       IsModule (init)
+    THEN
+       WHILE IsDefImp (init) OR IsModule (init) DO
+          Expect (periodtok, stopset0, stopset1, stopset2 + SetOfStop2{identtok}) ;
+          StartScope (init) ;
+          Ident (stopset0, stopset1, stopset2) ;
+ 	 PopTtok (name, tok) ;
+          nextLevel := RequestSym (tok, name) ;
+          EndScope ;
+ 	 CheckCanBeImported (init, nextLevel) ;
+ 	 init := nextLevel
+       END ;
+       PushTFQualident (tok, tokstart, init) ;
+       PutIncluded (init)
+    ELSE
+       PushTFQualident (tok, tokstart, init)
+    END
+ END CheckModuleQualident ;
+ 
  % module P3Build end
  BEGIN
     BlockState := InitState ()
*************** Number := Integer | Real =:
*** 643,679 ****
  --  IsAutoPushOff then we just consume tokens.
  --
  
! Qualident :=                                                               % VAR name          : Name ;
!                                                                                  init, ip1,
!                                                                                  tokstart, tok : CARDINAL ; %
!              Ident
                                                                             % IF IsAutoPushOn()
                                                                               THEN
!                                                                                 PopTtok(name, tokstart) ;
! 										tok := tokstart ;
!                                                                                 init := RequestSym (tok, name) ;
!                                                                                 WHILE IsDefImp (init) OR IsModule (init) DO
!                                                                                    Expect (periodtok, stopset0, stopset1, stopset2 + SetOfStop2{identtok}) ;
!                                                                                    StartScope (init) ;
!                                                                                    Ident (stopset0, stopset1, stopset2) ;
!                                                                                    PopTtok (name, tok) ;
!                                                                                    ip1 := RequestSym (tok, name) ;
!                                                                                    PutIncluded(ip1) ;
!                                                                                    EndScope ;
!                                                                                    CheckCanBeImported(init, ip1) ;
!                                                                                    init := ip1
!                                                                                 END ;
! 										IF tok#tokstart
! 										THEN
! 										   tok := MakeVirtualTok (tokstart, tokstart, tok)
! 										END ;
!                                                                                 IF IsProcedure(init) OR IsProcType(init)
!                                                                                 THEN
!                                                                                    PushTtok(init, tok)
!                                                                                 ELSE
!                                                                                    PushTFtok(init, GetType(init), tok) ;
!                                                                                 END
!                                                                              ELSE %
               { "." Ident }                                                 % END %
             =:
  
--- 706,716 ----
  --  IsAutoPushOff then we just consume tokens.
  --
  
! Qualident := Ident
                                                                             % IF IsAutoPushOn()
                                                                               THEN
!      										CheckModuleQualident (stopset0, stopset1, stopset2)
!                                                                              ELSE (* just parse qualident *) %
               { "." Ident }                                                 % END %
             =:
  
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/PCBuild.bnf gcc-15-20250719/gcc/m2/gm2-compiler/PCBuild.bnf
*** gcc-15-20250712/gcc/m2/gm2-compiler/PCBuild.bnf	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/PCBuild.bnf	Sat Jul 19 22:32:15 2025
*************** FROM M2Quads IMPORT Top, PushT, PopT, Pu
*** 65,71 ****
                      PushTFA,
                      PushTFn, PopTFn, PushTFtok, PopTtok, PopTFtok, PushTtok, PushTFntok,
                      PushT, PushTF, IsAutoPushOn, PushAutoOff, PushAutoOn, PopAuto,
!                     DupFrame,
                      BuildTypeForConstructor, BuildConstructor, BuildConstructorEnd,
                      PopConstructor,
                      NextConstructorField, SilentBuildConstructor,
--- 65,71 ----
                      PushTFA,
                      PushTFn, PopTFn, PushTFtok, PopTtok, PopTFtok, PushTtok, PushTFntok,
                      PushT, PushTF, IsAutoPushOn, PushAutoOff, PushAutoOn, PopAuto,
!                     DupFrame, Annotate,
                      BuildTypeForConstructor, BuildConstructor, BuildConstructorEnd,
                      PopConstructor,
                      NextConstructorField, SilentBuildConstructor,
*************** FROM SymbolTable IMPORT MakeGnuAsm, PutG
*** 118,123 ****
--- 118,124 ----
                          PutIncluded,
                          IsVarParam, IsProcedure, IsDefImp, IsModule,
                          IsRecord, IsProcType,
+                         GetCurrentModule, IsInnerModule, IsImported,
                          RequestSym,
                          GetSym, GetLocalSym ;
  
*************** BEGIN
*** 412,417 ****
--- 413,480 ----
     Expect(realtok, stopset0, stopset1, stopset2)
  END Real ;
  
+ 
+ (*
+    PushTFQualident - push the result of the Qualident
+                      to the stack.  It checks to see if init
+ 		     is a procedure or proc type and if so
+ 		     it does not push the return type.
+ *)
+ 
+ PROCEDURE PushTFQualident (tok, tokstart: CARDINAL;
+                            init: CARDINAL) ;
+ BEGIN
+    IF tok#tokstart
+    THEN
+       tok := MakeVirtualTok (tokstart, tokstart, tok)
+    END ;
+    IF IsProcedure (init) OR IsProcType (init)
+    THEN
+       PushTtok (init, tok) ;
+       Annotate ("%1s(%1d)||qualident procedure/proctype") ;
+    ELSE
+       Annotate ("%1s(%1d)|%1s(%1d)||qualident|type") ;
+       PushTFtok (init, GetType (init), tok) ;
+    END
+ END PushTFQualident ;
+ 
+ 
+ (*
+    CheckModuleQualident - check to see if the beginning ident of the qualident is an
+                           imported module.
+ *)
+ 
+ PROCEDURE CheckModuleQualident (stopset0: SetOfStop0;
+                                 stopset1: SetOfStop1;
+ 				stopset2: SetOfStop2) ;
+ VAR
+    name         : Name ;
+    init,
+    nextLevel,
+    tok, tokstart: CARDINAL ;
+ BEGIN
+    PopTtok (name, tokstart) ;
+    tok := tokstart ;
+    init := RequestSym (tok, name) ;
+    IF IsImported (GetCurrentModule (), init) AND (IsDefImp (init) OR IsModule (init))
+    THEN
+       WHILE IsDefImp (init) OR IsModule (init) DO
+          Expect (periodtok, stopset0, stopset1, stopset2 + SetOfStop2{identtok}) ;
+          StartScope (init) ;
+          Ident (stopset0, stopset1, stopset2) ;
+ 	 PopTtok (name, tok) ;
+          nextLevel := RequestSym (tok, name) ;
+          EndScope ;
+ 	 CheckCanBeImported (init, nextLevel) ;
+ 	 init := nextLevel
+       END ;
+       PushTFQualident (tok, tokstart, init) ;
+       PutIncluded (init)
+    ELSE
+       PushTFQualident (tok, tokstart, init)
+    END
+ END CheckModuleQualident ;
+ 
  % module PCBuild end
  BEGIN
     BlockState := InitState ()
*************** ImplementationOrProgramModule :=
*** 569,605 ****
  
  Number := Integer | Real =:
  
! Qualident :=                                                               % VAR name          : Name ;
!                                                                                  init, ip1,
!                                                                                  tokstart, tok : CARDINAL ; %
!              Ident
                                                                             % IF IsAutoPushOn()
                                                                               THEN
!                                                                                 PopTtok(name, tokstart) ;
! 										tok := tokstart ;
!                                                                                 init := RequestSym (tok, name) ;
!                                                                                 WHILE IsDefImp (init) OR IsModule (init) DO
!                                                                                    Expect (periodtok, stopset0, stopset1, stopset2 + SetOfStop2{identtok}) ;
!                                                                                    StartScope (init) ;
!                                                                                    Ident (stopset0, stopset1, stopset2) ;
!                                                                                    PopTtok (name, tok) ;
!                                                                                    ip1 := RequestSym (tok, name) ;
!                                                                                    PutIncluded(ip1) ;
!                                                                                    EndScope ;
!                                                                                    CheckCanBeImported(init, ip1) ;
!                                                                                    init := ip1
!                                                                                 END ;
! 										IF tok#tokstart
! 										THEN
! 										   tok := MakeVirtualTok (tokstart, tokstart, tok)
! 										END ;
!                                                                                 IF IsProcedure(init) OR IsProcType(init)
!                                                                                 THEN
!                                                                                    PushTtok(init, tok)
!                                                                                 ELSE
!                                                                                    PushTFtok(init, GetType(init), tok) ;
!                                                                                 END
!                                                                              ELSE %
               { "." Ident }                                                 % END %
             =:
  
--- 632,642 ----
  
  Number := Integer | Real =:
  
! Qualident := Ident
                                                                             % IF IsAutoPushOn()
                                                                               THEN
!      										CheckModuleQualident (stopset0, stopset1, stopset2)
!                                                                              ELSE (* just parse qualident *) %
               { "." Ident }                                                 % END %
             =:
  
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-compiler/PHBuild.bnf gcc-15-20250719/gcc/m2/gm2-compiler/PHBuild.bnf
*** gcc-15-20250712/gcc/m2/gm2-compiler/PHBuild.bnf	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-compiler/PHBuild.bnf	Sat Jul 19 22:32:15 2025
*************** FROM SymbolTable IMPORT MakeGnuAsm, PutG
*** 130,141 ****
                          PutGnuAsmOutput, PutGnuAsmTrash, PutGnuAsmVolatile,
                          MakeRegInterface,
                          PutRegInterface, GetRegInterface,
!                         GetSymName, GetType,
                          NulSym,
                          StartScope, EndScope,
                          PutIncluded,
                          IsVarParam, IsProcedure, IsDefImp, IsModule,
!                         IsRecord, IsProcType,
                          RequestSym,
                          GetSym, GetLocalSym ;
  
--- 130,141 ----
                          PutGnuAsmOutput, PutGnuAsmTrash, PutGnuAsmVolatile,
                          MakeRegInterface,
                          PutRegInterface, GetRegInterface,
!                         GetSymName, GetType, GetCurrentModule,
                          NulSym,
                          StartScope, EndScope,
                          PutIncluded,
                          IsVarParam, IsProcedure, IsDefImp, IsModule,
!                         IsRecord, IsProcType, IsInnerModule, IsImported,
                          RequestSym,
                          GetSym, GetLocalSym ;
  
*************** BEGIN
*** 368,373 ****
--- 368,435 ----
     Expect(realtok, stopset0, stopset1, stopset2)
  END Real ;
  
+ 
+ (*
+    PushTFQualident - push the result of the Qualident
+                      to the stack.  It checks to see if init
+ 		     is a procedure or proc type and if so
+ 		     it does not push the return type.
+ *)
+ 
+ PROCEDURE PushTFQualident (tok, tokstart: CARDINAL;
+                            init: CARDINAL) ;
+ BEGIN
+    IF tok#tokstart
+    THEN
+       tok := MakeVirtualTok (tokstart, tokstart, tok)
+    END ;
+    IF IsProcedure (init) OR IsProcType (init)
+    THEN
+       PushTtok (init, tok) ;
+       Annotate ("%1s(%1d)||qualident procedure/proctype") ;
+    ELSE
+       Annotate ("%1s(%1d)|%1s(%1d)||qualident|type") ;
+       PushTFtok (init, GetType (init), tok) ;
+    END
+ END PushTFQualident ;
+ 
+ 
+ (*
+    CheckModuleQualident - check to see if the beginning ident of the qualident is an
+                           imported module.
+ *)
+ 
+ PROCEDURE CheckModuleQualident (stopset0: SetOfStop0;
+                                 stopset1: SetOfStop1;
+ 				stopset2: SetOfStop2) ;
+ VAR
+    name         : Name ;
+    init,
+    nextLevel,
+    tok, tokstart: CARDINAL ;
+ BEGIN
+    PopTtok (name, tokstart) ;
+    tok := tokstart ;
+    init := RequestSym (tok, name) ;
+    IF IsImported (GetCurrentModule (), init) AND (IsDefImp (init) OR IsModule (init))
+    THEN
+       WHILE IsDefImp (init) OR IsModule (init) DO
+          Expect (periodtok, stopset0, stopset1, stopset2 + SetOfStop2{identtok}) ;
+          StartScope (init) ;
+          Ident (stopset0, stopset1, stopset2) ;
+ 	 PopTtok (name, tok) ;
+          nextLevel := RequestSym (tok, name) ;
+          EndScope ;
+ 	 CheckCanBeImported (init, nextLevel) ;
+ 	 init := nextLevel
+       END ;
+       PushTFQualident (tok, tokstart, init) ;
+       PutIncluded (init)
+    ELSE
+       PushTFQualident (tok, tokstart, init)
+    END
+ END CheckModuleQualident ;
+ 
  % module PHBuild end
  END PHBuild.
  % rules
*************** ImplementationOrProgramModule :=
*** 541,566 ****
  Number := Integer | Real =:
  
  
! Qualident :=                                                               % VAR name: Name ;
!                                                                                  Type, Sym, tok: CARDINAL ; %
!              Ident
                                                                             % IF IsAutoPushOn()
                                                                               THEN
!                                                                                 PopTtok(name, tok) ;
!                                                                                 Sym := RequestSym (tok, name) ;
!                                                                                 IF IsDefImp(Sym) OR IsModule(Sym)
!                                                                                 THEN
!                                                                                    Expect(periodtok, stopset0, stopset1, stopset2 + SetOfStop2{identtok}) ;
!                                                                                    StartScope(Sym) ;
!                                                                                    Qualident(stopset0, stopset1, stopset2) ;
!                                                                                    (* should we test for lack of ident? *)
!                                                                                    PopTFtok(Sym, Type, tok) ;
!                                                                                    PushTFtok(Sym, Type, tok) ;
!                                                                                    EndScope ;
!                                                                                    PutIncluded(Sym)
!                                                                                 ELSE
!                                                                                    PushTFtok(Sym, GetType(Sym), tok) ;
!                                                                                 END
                                                                               ELSE (* just parse qualident *) %
               { "." Ident }                                                 % END %
             =:
--- 603,612 ----
  Number := Integer | Real =:
  
  
! Qualident := Ident
                                                                             % IF IsAutoPushOn()
                                                                               THEN
!      										CheckModuleQualident (stopset0, stopset1, stopset2)
                                                                               ELSE (* just parse qualident *) %
               { "." Ident }                                                 % END %
             =:
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-gcc/m2options.h gcc-15-20250719/gcc/m2/gm2-gcc/m2options.h
*** gcc-15-20250712/gcc/m2/gm2-gcc/m2options.h	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-gcc/m2options.h	Sat Jul 19 22:32:15 2025
*************** EXTERN char *M2Options_GetM2DumpFilter (
*** 168,173 ****
--- 168,175 ----
  EXTERN void M2Options_SetM2DebugTraceFilter (bool value, const char *arg);
  EXTERN bool M2Options_SetM2Dump (bool value, const char *arg);
  EXTERN bool M2Options_GetDumpGimple (void);
+ EXTERN void M2Options_SetStrictTypeAssignment (bool value);
+ EXTERN void M2Options_SetStrictTypeReason (bool value);
  
  #undef EXTERN
  #endif /* m2options_h.  */
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/ARRAYOFCHAR.def gcc-15-20250719/gcc/m2/gm2-libs/ARRAYOFCHAR.def
*** gcc-15-20250712/gcc/m2/gm2-libs/ARRAYOFCHAR.def	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs/ARRAYOFCHAR.def	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,40 ----
+ (* ARRAYOFCHAR.def provides output procedures for the ARRAY OF CHAR datatype.
+ 
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ Contributed by Gaius Mulley <gaiusmod2@gmail.com>.
+ 
+ This file is part of GNU Modula-2.
+ 
+ GNU Modula-2 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.
+ 
+ GNU Modula-2 is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  *)
+ 
+ DEFINITION MODULE ARRAYOFCHAR ;
+ 
+ FROM FIO IMPORT File ;
+ 
+ 
+ (*
+    Description: provides write procedures for ARRAY OF CHAR.
+ *)
+ 
+ PROCEDURE Write (f: File; str: ARRAY OF CHAR) ;
+ PROCEDURE WriteLn (f: File) ;
+ 
+ 
+ END ARRAYOFCHAR.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/ARRAYOFCHAR.mod gcc-15-20250719/gcc/m2/gm2-libs/ARRAYOFCHAR.mod
*** gcc-15-20250712/gcc/m2/gm2-libs/ARRAYOFCHAR.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs/ARRAYOFCHAR.mod	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,56 ----
+ (* ARRAYOFCHAR.def provides output procedures for the ARRAY OF CHAR datatype.
+ 
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ Contributed by Gaius Mulley <gaiusmod2@gmail.com>.
+ 
+ This file is part of GNU Modula-2.
+ 
+ GNU Modula-2 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.
+ 
+ GNU Modula-2 is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  *)
+ 
+ IMPLEMENTATION MODULE ARRAYOFCHAR ;
+ 
+ FROM FIO IMPORT WriteChar, WriteLine ;
+ IMPORT StrLib ;
+ 
+ 
+ (*
+    Write - writes a string to file f.
+ *)
+ 
+ PROCEDURE Write (f: File; str: ARRAY OF CHAR) ;
+ VAR
+    len, i: CARDINAL ;
+ BEGIN
+    len := StrLib.StrLen (str) ;
+    i := 0 ;
+    WHILE i < len DO
+       WriteChar (f, str[i]) ;
+       INC (i)
+    END
+ END Write ;
+ 
+ 
+ PROCEDURE WriteLn (f: File) ;
+ BEGIN
+    WriteLine (f)
+ END WriteLn ;
+ 
+ 
+ END ARRAYOFCHAR.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/CFileSysOp.def gcc-15-20250719/gcc/m2/gm2-libs/CFileSysOp.def
*** gcc-15-20250712/gcc/m2/gm2-libs/CFileSysOp.def	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs/CFileSysOp.def	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,56 ----
+ DEFINITION MODULE CFileSysOp ;
+ 
+ FROM SYSTEM IMPORT ADDRESS ;
+ 
+ 
+ (*
+    Description: provides access to filesystem operations.
+                 The implementation module is written in C
+                 and the parameters behave as their C
+                 counterparts.
+ *)
+ 
+ TYPE
+    AccessMode = SET OF AccessStatus ;
+    AccessStatus = (F_OK, R_OK, W_OK, X_OK, A_FAIL) ;
+ 
+ 
+ PROCEDURE Unlink (filename: ADDRESS) : INTEGER ;
+ 
+ 
+ (*
+    Access - test access to a path or file.  The behavior is
+             the same as defined in access(2).  Except that
+             on A_FAIL is only used during the return result
+             indicating the underlying C access has returned
+             -1 (and errno can be checked).
+ *)
+ 
+ PROCEDURE Access (pathname: ADDRESS; mode: AccessMode) : AccessMode ;
+ 
+ 
+ (* Return TRUE if the caller can see the existance of the file or
+    directory on the filesystem.  *)
+ 
+ (*
+    IsDir - return true if filename is a regular directory.
+ *)
+ 
+ PROCEDURE IsDir (dirname: ADDRESS) : BOOLEAN ;
+ 
+ 
+ (*
+    IsFile - return true if filename is a regular file.
+ *)
+ 
+ PROCEDURE IsFile (filename: ADDRESS) : BOOLEAN ;
+ 
+ 
+ (*
+    Exists - return true if pathname exists.
+ *)
+ 
+ PROCEDURE Exists (pathname: ADDRESS) : BOOLEAN ;
+ 
+ 
+ END CFileSysOp.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/CHAR.def gcc-15-20250719/gcc/m2/gm2-libs/CHAR.def
*** gcc-15-20250712/gcc/m2/gm2-libs/CHAR.def	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs/CHAR.def	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,40 ----
+ (* CHAR.def provides output procedures for the CHAR datatype.
+ 
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ Contributed by Gaius Mulley <gaiusmod2@gmail.com>.
+ 
+ This file is part of GNU Modula-2.
+ 
+ GNU Modula-2 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.
+ 
+ GNU Modula-2 is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  *)
+ 
+ DEFINITION MODULE CHAR ;
+ 
+ FROM FIO IMPORT File ;
+ 
+ 
+ (*
+    Write a single character ch to file f.
+ *)
+ 
+ PROCEDURE Write (f: File; ch: CHAR) ;
+ PROCEDURE WriteLn (f: File) ;
+ 
+ 
+ END CHAR.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/CHAR.mod gcc-15-20250719/gcc/m2/gm2-libs/CHAR.mod
*** gcc-15-20250712/gcc/m2/gm2-libs/CHAR.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs/CHAR.mod	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,48 ----
+ (* CHAR.mod provides output procedures for the CHAR datatype.
+ 
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ Contributed by Gaius Mulley <gaiusmod2@gmail.com>.
+ 
+ This file is part of GNU Modula-2.
+ 
+ GNU Modula-2 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.
+ 
+ GNU Modula-2 is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  *)
+ 
+ IMPLEMENTATION MODULE CHAR ;
+ 
+ IMPORT FIO ;
+ 
+ 
+ (*
+    Write a single character ch to file f.
+ *)
+ 
+ PROCEDURE Write (f: File; ch: CHAR) ;
+ BEGIN
+    FIO.WriteChar (f, ch)
+ END Write ;
+ 
+ 
+ PROCEDURE WriteLn (f: File) ;
+ BEGIN
+    FIO.WriteLine (f)
+ END WriteLn ;
+ 
+ 
+ END CHAR.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/FileSysOp.def gcc-15-20250719/gcc/m2/gm2-libs/FileSysOp.def
*** gcc-15-20250712/gcc/m2/gm2-libs/FileSysOp.def	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs/FileSysOp.def	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,44 ----
+ (* FileSysOp.def provides procedures to manipulate the file system.
+ 
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ Contributed by Gaius Mulley <gaiusmod2@gmail.com>.
+ 
+ This file is part of GNU Modula-2.
+ 
+ GNU Modula-2 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.
+ 
+ GNU Modula-2 is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  *)
+ 
+ DEFINITION MODULE FileSysOp ;
+ 
+ FROM CFileSysOp IMPORT AccessMode ;
+ 
+ 
+ (*
+    Description: provides access to filesystem operations using
+                 Modula-2 base types.
+ *)
+ 
+ PROCEDURE Exists (filename: ARRAY OF CHAR) : BOOLEAN ;
+ PROCEDURE IsDir (dirname: ARRAY OF CHAR) : BOOLEAN ;
+ PROCEDURE IsFile (filename: ARRAY OF CHAR) : BOOLEAN ;
+ PROCEDURE Unlink (filename: ARRAY OF CHAR) : BOOLEAN ;
+ PROCEDURE Access (pathname: ARRAY OF CHAR; mode: AccessMode) : AccessMode ;
+ 
+ 
+ END FileSysOp.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/FileSysOp.mod gcc-15-20250719/gcc/m2/gm2-libs/FileSysOp.mod
*** gcc-15-20250712/gcc/m2/gm2-libs/FileSysOp.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs/FileSysOp.mod	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,98 ----
+ (* FileSysOp.mod provides procedures to manipulate the file system.
+ 
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ Contributed by Gaius Mulley <gaiusmod2@gmail.com>.
+ 
+ This file is part of GNU Modula-2.
+ 
+ GNU Modula-2 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.
+ 
+ GNU Modula-2 is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  *)
+ 
+ IMPLEMENTATION MODULE FileSysOp ;
+ 
+ IMPORT StringFileSysOp ;
+ FROM DynamicStrings IMPORT String, InitString, KillString ;
+ 
+ 
+ (*
+    Description: provides access to filesystem operations using
+                 Modula-2 base types.
+ *)
+ 
+ PROCEDURE Exists (filename: ARRAY OF CHAR) : BOOLEAN ;
+ VAR
+    fn    : String ;
+    result: BOOLEAN ;
+ BEGIN
+    fn := InitString (filename) ;
+    result := StringFileSysOp.Exists (fn) ;
+    fn := KillString (fn) ;
+    RETURN result
+ END Exists ;
+ 
+ 
+ PROCEDURE IsDir (dirname: ARRAY OF CHAR) : BOOLEAN ;
+ VAR
+    fn    : String ;
+    result: BOOLEAN ;
+ BEGIN
+    fn := InitString (dirname) ;
+    result := StringFileSysOp.IsDir (fn) ;
+    fn := KillString (fn) ;
+    RETURN result
+ END IsDir ;
+ 
+ 
+ PROCEDURE IsFile (filename: ARRAY OF CHAR) : BOOLEAN ;
+ VAR
+    fn    : String ;
+    result: BOOLEAN ;
+ BEGIN
+    fn := InitString (filename) ;
+    result := StringFileSysOp.IsFile (fn) ;
+    fn := KillString (fn) ;
+    RETURN result
+ END IsFile ;
+ 
+ 
+ PROCEDURE Unlink (filename: ARRAY OF CHAR) : BOOLEAN ;
+ VAR
+    fn    : String ;
+    result: BOOLEAN ;
+ BEGIN
+    fn := InitString (filename) ;
+    result := StringFileSysOp.Unlink (fn) ;
+    fn := KillString (fn) ;
+    RETURN result
+ END Unlink ;
+ 
+ 
+ PROCEDURE Access (pathname: ARRAY OF CHAR; mode: AccessMode) : AccessMode ;
+ VAR
+    pn    : String ;
+    result: AccessMode ;
+ BEGIN
+    pn := InitString (pathname) ;
+    result := StringFileSysOp.Access (pn, mode) ;
+    pn := KillString (pn) ;
+    RETURN result
+ END Access ;
+ 
+ 
+ END FileSysOp.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/SFIO.def gcc-15-20250719/gcc/m2/gm2-libs/SFIO.def
*** gcc-15-20250712/gcc/m2/gm2-libs/SFIO.def	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-libs/SFIO.def	Sat Jul 19 22:32:15 2025
*************** DEFINITION MODULE SFIO ;
*** 29,36 ****
  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.
--- 29,34 ----
*************** PROCEDURE WriteS (file: File; s: String)
*** 91,94 ****
--- 89,100 ----
  PROCEDURE ReadS (file: File) : String ;
  
  
+ (*
+    GetFileName - return a new string containing the name of the file.
+                  The string should be killed by the caller.
+ *)
+ 
+ PROCEDURE GetFileName (file: File) : String ;
+ 
+ 
  END SFIO.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/SFIO.mod gcc-15-20250719/gcc/m2/gm2-libs/SFIO.mod
*** gcc-15-20250712/gcc/m2/gm2-libs/SFIO.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-libs/SFIO.mod	Sat Jul 19 22:32:15 2025
*************** IMPLEMENTATION MODULE SFIO ;
*** 29,38 ****
  FROM ASCII IMPORT nul ;
  
  FROM DynamicStrings IMPORT string, Length, InitString, ConCatChar,
                             InitStringDB, InitStringCharStarDB,
                             InitStringCharDB, MultDB, DupDB, SliceDB ;
  
! FROM FIO IMPORT exists, openToRead, openToWrite, openForRandom, WriteNBytes, ReadChar,
                  EOLN, EOF, IsNoError ;
  
  (*
--- 29,40 ----
  FROM ASCII IMPORT nul ;
  
  FROM DynamicStrings IMPORT string, Length, InitString, ConCatChar,
+                            InitStringCharStar,
                             InitStringDB, InitStringCharStarDB,
                             InitStringCharDB, MultDB, DupDB, SliceDB ;
  
! FROM FIO IMPORT exists, openToRead, openToWrite, openForRandom,
!                 WriteNBytes, ReadChar, getFileName,
                  EOLN, EOF, IsNoError ;
  
  (*
*************** BEGIN
*** 144,147 ****
--- 146,160 ----
  END ReadS ;
  
  
+ (*
+    GetFileName - return a new string containing the name of the file.
+                  The string should be killed by the caller.
+ *)
+ 
+ PROCEDURE GetFileName (file: File) : String ;
+ BEGIN
+    RETURN InitStringCharStar (getFileName (file))
+ END GetFileName ;
+ 
+ 
  END SFIO.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/String.def gcc-15-20250719/gcc/m2/gm2-libs/String.def
*** gcc-15-20250712/gcc/m2/gm2-libs/String.def	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs/String.def	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,35 ----
+ (* String.def provides output procedures for the String datatype.
+ 
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ Contributed by Gaius Mulley <gaiusmod2@gmail.com>.
+ 
+ This file is part of GNU Modula-2.
+ 
+ GNU Modula-2 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.
+ 
+ GNU Modula-2 is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  *)
+ 
+ DEFINITION MODULE String ;
+ 
+ FROM DynamicStrings IMPORT String ;
+ FROM FIO IMPORT File ;
+ 
+ PROCEDURE Write (f: File; str: String) ;
+ PROCEDURE WriteLn (f: File) ;
+ 
+ END String.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/String.mod gcc-15-20250719/gcc/m2/gm2-libs/String.mod
*** gcc-15-20250712/gcc/m2/gm2-libs/String.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs/String.mod	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,51 ----
+ (* String.mod provides output procedures for the String datatype.
+ 
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ Contributed by Gaius Mulley <gaiusmod2@gmail.com>.
+ 
+ This file is part of GNU Modula-2.
+ 
+ GNU Modula-2 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.
+ 
+ GNU Modula-2 is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  *)
+ 
+ IMPLEMENTATION MODULE String ;
+ 
+ IMPORT DynamicStrings, CHAR ;
+ 
+ 
+ PROCEDURE Write (f: File; str: String) ;
+ VAR
+    i, len: CARDINAL ;
+ BEGIN
+    i := 0 ;
+    len := DynamicStrings.Length (str) ;
+    WHILE i < len DO
+       CHAR.Write (f, DynamicStrings.char (str, i)) ;
+       INC (i)
+    END
+ END Write ;
+ 
+ 
+ PROCEDURE WriteLn (f: File) ;
+ BEGIN
+    CHAR.WriteLn (f)
+ END WriteLn ;
+ 
+ 
+ END String.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/StringFileSysOp.def gcc-15-20250719/gcc/m2/gm2-libs/StringFileSysOp.def
*** gcc-15-20250712/gcc/m2/gm2-libs/StringFileSysOp.def	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs/StringFileSysOp.def	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,40 ----
+ (* StringFileSysOp.def provides procedures to manipulate the file system.
+ 
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ Contributed by Gaius Mulley <gaiusmod2@gmail.com>.
+ 
+ This file is part of GNU Modula-2.
+ 
+ GNU Modula-2 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.
+ 
+ GNU Modula-2 is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  *)
+ 
+ DEFINITION MODULE StringFileSysOp ;
+ 
+ FROM DynamicStrings IMPORT String ;
+ FROM CFileSysOp IMPORT AccessMode ;
+ 
+ 
+ PROCEDURE Exists (filename: String) : BOOLEAN ;
+ PROCEDURE IsDir (dirname: String) : BOOLEAN ;
+ PROCEDURE IsFile (filename: String) : BOOLEAN ;
+ PROCEDURE Unlink (filename: String) : BOOLEAN ;
+ PROCEDURE Access (pathname: String; mode: AccessMode) : AccessMode ;
+ 
+ 
+ END StringFileSysOp.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs/StringFileSysOp.mod gcc-15-20250719/gcc/m2/gm2-libs/StringFileSysOp.mod
*** gcc-15-20250712/gcc/m2/gm2-libs/StringFileSysOp.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs/StringFileSysOp.mod	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,63 ----
+ (* StringFileSysOp.mod provides procedures to manipulate the file system.
+ 
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ Contributed by Gaius Mulley <gaiusmod2@gmail.com>.
+ 
+ This file is part of GNU Modula-2.
+ 
+ GNU Modula-2 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.
+ 
+ GNU Modula-2 is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  *)
+ 
+ IMPLEMENTATION MODULE StringFileSysOp ;
+ 
+ IMPORT CFileSysOp ;
+ FROM DynamicStrings IMPORT string ;
+ 
+ 
+ PROCEDURE Exists (filename: String) : BOOLEAN ;
+ BEGIN
+    RETURN CFileSysOp.Exists (string (filename))
+ END Exists ;
+ 
+ 
+ PROCEDURE IsDir (dirname: String) : BOOLEAN ;
+ BEGIN
+   RETURN CFileSysOp.IsDir (string (dirname))
+ END IsDir ;
+ 
+ 
+ PROCEDURE IsFile (filename: String) : BOOLEAN ;
+ BEGIN
+    RETURN CFileSysOp.IsFile (string (filename))
+ END IsFile ;
+ 
+ 
+ PROCEDURE Unlink (filename: String) : BOOLEAN ;
+ BEGIN
+    RETURN CFileSysOp.Unlink (string (filename)) = 0
+ END Unlink ;
+ 
+ 
+ PROCEDURE Access (pathname: String; mode: AccessMode) : AccessMode ;
+ BEGIN
+    RETURN CFileSysOp.Access (string (pathname), mode)
+ END Access ;
+ 
+ 
+ END StringFileSysOp.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs-iso/IOChanUtils.def gcc-15-20250719/gcc/m2/gm2-libs-iso/IOChanUtils.def
*** gcc-15-20250712/gcc/m2/gm2-libs-iso/IOChanUtils.def	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs-iso/IOChanUtils.def	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,35 ----
+ DEFINITION MODULE IOChanUtils ;
+ 
+ (*
+     Title      : IOChanUtils
+     Author     : Gaius Mulley
+     System     : GNU Modula-2
+     Date       : Sat Jun 28 23:33:06 2025
+     Revision   : $Version$
+     Description: provides additional procedures to work on
+                  ChanIds.
+ *)
+ 
+ FROM DynamicStrings IMPORT String ;
+ FROM FIO IMPORT File ;
+ 
+ IMPORT IOChan ;
+ 
+ 
+ (*
+    GetFileName - returns the filename as a new string associated
+                  with chanid c.  This string should be killed by
+                  the caller.
+ *)
+ 
+ PROCEDURE GetFileName (c: IOChan.ChanId) : String ;
+ 
+ 
+ (*
+    GetFile - returns the FIO.File associated with ChanId c.
+ *)
+ 
+ PROCEDURE GetFile (c: IOChan.ChanId) : File ;
+ 
+ 
+ END IOChanUtils.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs-iso/IOChanUtils.mod gcc-15-20250719/gcc/m2/gm2-libs-iso/IOChanUtils.mod
*** gcc-15-20250712/gcc/m2/gm2-libs-iso/IOChanUtils.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/m2/gm2-libs-iso/IOChanUtils.mod	Sat Jul 19 22:32:15 2025
***************
*** 0 ****
--- 1,28 ----
+ IMPLEMENTATION MODULE IOChanUtils ;
+ 
+ IMPORT IOChan, SFIO, RTio ;
+ 
+ 
+ (*
+    GetFileName - returns the filename as a new string associated
+                  with chanid c.  This string should be killed by
+                  the caller.
+ *)
+ 
+ PROCEDURE GetFileName (c: IOChan.ChanId) : String ;
+ BEGIN
+    RETURN SFIO.GetFileName (GetFile (c))
+ END GetFileName ;
+ 
+ 
+ (*
+    GetFile - returns the FIO.File associated with ChanId c.
+ *)
+ 
+ PROCEDURE GetFile (c: IOChan.ChanId) : File ;
+ BEGIN
+    RETURN RTio.GetFile (c)
+ END GetFile ;
+ 
+ 
+ END IOChanUtils.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs-log/FileSystem.def gcc-15-20250719/gcc/m2/gm2-libs-log/FileSystem.def
*** gcc-15-20250712/gcc/m2/gm2-libs-log/FileSystem.def	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-libs-log/FileSystem.def	Sat Jul 19 22:32:15 2025
*************** FROM SYSTEM IMPORT WORD, BYTE, ADDRESS ;
*** 33,46 ****
  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
--- 33,38 ----
*************** PROCEDURE Doio (VAR f: File) ;
*** 272,275 ****
--- 264,284 ----
  PROCEDURE FileNameChar (ch: CHAR) : CHAR ;
  
  
+ (*
+    GetFileName - return a new string containing the name of the file.
+                  The string should be killed by the caller.
+ *)
+ 
+ PROCEDURE GetFileName (file: File) : String ;
+ 
+ 
+ (*
+    WriteString - writes contents to file.  The nul char
+                  will terminate the contents string otherwise
+                  all characters 0..HIGH (contents) are written.
+ *)
+ 
+ PROCEDURE WriteString (file: File; contents: ARRAY OF CHAR) ;
+ 
+ 
  END FileSystem.
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs-log/FileSystem.mod gcc-15-20250719/gcc/m2/gm2-libs-log/FileSystem.mod
*** gcc-15-20250712/gcc/m2/gm2-libs-log/FileSystem.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-libs-log/FileSystem.mod	Sat Jul 19 22:32:15 2025
*************** IMPLEMENTATION MODULE FileSystem ;
*** 29,36 ****
  FROM M2RTS IMPORT InstallTerminationProcedure ;
  FROM Storage IMPORT ALLOCATE ;
  FROM SYSTEM IMPORT ADR, COFF_T ;
! IMPORT SFIO, libc, wrapc ;
! FROM DynamicStrings IMPORT InitString, ConCat, ConCatChar, KillString, string ;
  FROM FormatStrings IMPORT Sprintf2 ;
  
  CONST
--- 29,39 ----
  FROM M2RTS IMPORT InstallTerminationProcedure ;
  FROM Storage IMPORT ALLOCATE ;
  FROM SYSTEM IMPORT ADR, COFF_T ;
! IMPORT SFIO, libc, wrapc, StrLib ;
! 
! FROM DynamicStrings IMPORT InitString, ConCat, ConCatChar,
!                            KillString, string, Dup ;
! 
  FROM FormatStrings IMPORT Sprintf2 ;
  
  CONST
*************** END FileNameChar ;
*** 595,600 ****
--- 598,634 ----
  
  
  (*
+    GetFileName - return a new string containing the name of the file.
+                  The string should be killed by the caller.
+ *)
+ 
+ PROCEDURE GetFileName (file: File) : String ;
+ BEGIN
+    RETURN Dup (file.name)
+ END GetFileName ;
+ 
+ 
+ (*
+    WriteString - writes contents to file.  The nul char
+                  will terminate the contents string otherwise
+                  all characters 0..HIGH (contents) are written.
+ *)
+ 
+ PROCEDURE WriteString (file: File; contents: ARRAY OF CHAR) ;
+ VAR
+    ch     : CHAR ;
+    i, high: CARDINAL ;
+ BEGIN
+    i := 0 ;
+    high := StrLib.StrLen (contents) ;
+    WHILE i <= high DO
+       WriteChar (file, contents[i]) ;
+       INC (i)
+    END
+ END WriteString ;
+ 
+ 
+ (*
     MakeTemporary - creates a temporary file and returns its name.
  *)
  
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs-log/InOut.mod gcc-15-20250719/gcc/m2/gm2-libs-log/InOut.mod
*** gcc-15-20250712/gcc/m2/gm2-libs-log/InOut.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-libs-log/InOut.mod	Sat Jul 19 22:32:15 2025
*************** END WriteString ;
*** 257,272 ****
  PROCEDURE LocalWrite (ch: CHAR) ;
  BEGIN
     FIO.WriteChar(outFile, ch) ;
!    Done := FIO.IsNoError(outFile)
! (*
!    IF outUsed
!    THEN
!       FIO.WriteChar(outFile, ch) ;
!       Done := FIO.IsNoError(outFile)
!    ELSE
!       Done := (write(stdout, ADR(ch), 1) = 1)
!    END
! *)
  END LocalWrite ;
  
  
--- 257,264 ----
  PROCEDURE LocalWrite (ch: CHAR) ;
  BEGIN
     FIO.WriteChar(outFile, ch) ;
!    Done := FIO.IsNoError(outFile) ;
!    FIO.FlushBuffer (outFile)
  END LocalWrite ;
  
  
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs-log/Strings.def gcc-15-20250719/gcc/m2/gm2-libs-log/Strings.def
*** gcc-15-20250712/gcc/m2/gm2-libs-log/Strings.def	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-libs-log/Strings.def	Sat Jul 19 22:32:15 2025
*************** PROCEDURE Delete (VAR str: ARRAY OF CHAR
*** 53,59 ****
  
  
  (*
!    Pos - return the first position of, substr, in, str.
  *)
  
  PROCEDURE Pos (substr, str: ARRAY OF CHAR) : CARDINAL ;
--- 53,61 ----
  
  
  (*
!    Pos - return the first position of substr in str.
!          If substr is not found in str then it returns
!          HIGH (str) + 1.
  *)
  
  PROCEDURE Pos (substr, str: ARRAY OF CHAR) : CARDINAL ;
diff -Nrcpad gcc-15-20250712/gcc/m2/gm2-libs-log/Strings.mod gcc-15-20250719/gcc/m2/gm2-libs-log/Strings.mod
*** gcc-15-20250712/gcc/m2/gm2-libs-log/Strings.mod	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/gm2-libs-log/Strings.mod	Sat Jul 19 22:32:15 2025
*************** END Delete ;
*** 83,121 ****
  
  
  (*
!    Pos - return the first position of, substr, in, str.
  *)
  
! PROCEDURE Pos (substr, str: ARRAY OF CHAR) : CARDINAL ;
  VAR
!    i, k, l   : INTEGER ;
!    s1, s2, s3: DynamicStrings.String ;
  BEGIN
!    s1 := DynamicStrings.InitString(str) ;
!    s2 := DynamicStrings.InitString(substr) ;
!    k := DynamicStrings.Length(s1) ;
!    l := DynamicStrings.Length(s2) ;
     i := 0 ;
     REPEAT
!       i := DynamicStrings.Index(s1, DynamicStrings.char(s2, 0), i) ;
!       IF i>=0
        THEN
!          s3 := DynamicStrings.Slice(s1, i, l) ;
!          IF DynamicStrings.Equal(s3, s2)
           THEN
!             s1 := DynamicStrings.KillString(s1) ;
!             s2 := DynamicStrings.KillString(s2) ;
!             s3 := DynamicStrings.KillString(s3) ;
              RETURN( i )
           END ;
!          s3 := DynamicStrings.KillString(s3)
        END ;
!       INC(i)
!    UNTIL i>=k ;
!    s1 := DynamicStrings.KillString(s1) ;
!    s2 := DynamicStrings.KillString(s2) ;
!    s3 := DynamicStrings.KillString(s3) ;
!    RETURN( HIGH(str)+1 )
  END Pos ;
  
  
--- 83,144 ----
  
  
  (*
!    PosLower - return the first position of substr in str.
  *)
  
! PROCEDURE PosLower (substr, str: ARRAY OF CHAR) : CARDINAL ;
  VAR
!    i, strLen, substrLen   : INTEGER ;
!    strS, substrS, scratchS: DynamicStrings.String ;
  BEGIN
!    strS := DynamicStrings.InitString (str) ;
!    substrS := DynamicStrings.InitString (substr) ;
!    strLen := DynamicStrings.Length (strS) ;
!    substrLen := DynamicStrings.Length (substrS) ;
     i := 0 ;
     REPEAT
!       i := DynamicStrings.Index (strS, DynamicStrings.char (substrS, 0), i) ;
!       IF i < 0
        THEN
!          (* No match on first character therefore return now.  *)
!          strS := DynamicStrings.KillString (strS) ;
!          substrS := DynamicStrings.KillString (substrS) ;
!          scratchS := DynamicStrings.KillString (scratchS) ;
!          RETURN( HIGH (str) + 1 )
!       ELSIF i + substrLen <= strLen
!       THEN
!          scratchS := DynamicStrings.Slice (strS, i, i + substrLen) ;
!          IF DynamicStrings.Equal (scratchS, substrS)
           THEN
!             strS := DynamicStrings.KillString (strS) ;
!             substrS := DynamicStrings.KillString (substrS) ;
!             scratchS := DynamicStrings.KillString (scratchS) ;
              RETURN( i )
           END ;
!          scratchS := DynamicStrings.KillString (scratchS)
        END ;
!       INC (i)
!    UNTIL i >= strLen ;
!    strS := DynamicStrings.KillString (strS) ;
!    substrS := DynamicStrings.KillString (substrS) ;
!    scratchS := DynamicStrings.KillString (scratchS) ;
!    RETURN( HIGH (str) + 1 )
! END PosLower ;
! 
! 
! (*
!    Pos - return the first position of substr in str.
!          If substr is not found in str then it returns
!          HIGH (str) + 1.
! *)
! 
! PROCEDURE Pos (substr, str: ARRAY OF CHAR) : CARDINAL ;
! BEGIN
!    IF Length (substr) <= Length (str)
!    THEN
!       RETURN PosLower (substr, str)
!    END ;
!    RETURN( HIGH (str) + 1 )
  END Pos ;
  
  
*************** PROCEDURE Copy (str: ARRAY OF CHAR;
*** 129,139 ****
  VAR
     s1, s2: DynamicStrings.String ;
  BEGIN
!    s1 := DynamicStrings.InitString(str) ;
!    s2 := DynamicStrings.Slice(s1, index, index+length) ;
!    DynamicStrings.CopyOut(result, s2) ;
!    s1 := DynamicStrings.KillString(s1) ;
!    s2 := DynamicStrings.KillString(s2)
  END Copy ;
  
  
--- 152,162 ----
  VAR
     s1, s2: DynamicStrings.String ;
  BEGIN
!    s1 := DynamicStrings.InitString (str) ;
!    s2 := DynamicStrings.Slice (s1, index, index+length) ;
!    DynamicStrings.CopyOut (result, s2) ;
!    s1 := DynamicStrings.KillString (s1) ;
!    s2 := DynamicStrings.KillString (s2)
  END Copy ;
  
  
diff -Nrcpad gcc-15-20250712/gcc/m2/target-independent/m2/Builtins.texi gcc-15-20250719/gcc/m2/target-independent/m2/Builtins.texi
*** gcc-15-20250712/gcc/m2/target-independent/m2/Builtins.texi	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/target-independent/m2/Builtins.texi	Sat Jul 19 22:32:15 2025
*************** PROCEDURE __BUILTIN__ strchr (s: ADDRESS
*** 348,353 ****
--- 348,362 ----
  @findex strrchr
  PROCEDURE __BUILTIN__ strrchr (s: ADDRESS; c: INTEGER) : ADDRESS ;
  
+ @findex clz
+ PROCEDURE __BUILTIN__ clz (value: CARDINAL) : INTEGER ;
+ @findex clzll
+ PROCEDURE __BUILTIN__ clzll (value: LONGCARD) : INTEGER ;
+ @findex ctz
+ PROCEDURE __BUILTIN__ ctz (value: CARDINAL) : INTEGER ;
+ @findex ctzll
+ PROCEDURE __BUILTIN__ ctzll (value: LONGCARD) : INTEGER ;
+ 
  (*
     longjmp - this GCC builtin restricts the val to always 1.
  *)
diff -Nrcpad gcc-15-20250712/gcc/m2/target-independent/m2/SYSTEM-iso.texi gcc-15-20250719/gcc/m2/target-independent/m2/SYSTEM-iso.texi
*** gcc-15-20250712/gcc/m2/target-independent/m2/SYSTEM-iso.texi	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/target-independent/m2/SYSTEM-iso.texi	Sat Jul 19 22:32:15 2025
*************** DEFINITION MODULE SYSTEM;
*** 8,14 ****
    (* The constants and types define underlying properties of storage *)
  
  EXPORT QUALIFIED BITSPERLOC, LOCSPERWORD,
!                  LOC, BYTE, WORD, ADDRESS, CSIZE_T, CSSIZE_T, (* 
                   Target specific data types.  *)
                   ADDADR, SUBADR, DIFADR, MAKEADR, ADR, ROTATE,
                   SHIFT, CAST, TSIZE,
--- 8,14 ----
    (* The constants and types define underlying properties of storage *)
  
  EXPORT QUALIFIED BITSPERLOC, LOCSPERWORD,
!                  LOC, BYTE, WORD, ADDRESS, CSIZE_T, CSSIZE_T, COFF_T, (* 
                   Target specific data types.  *)
                   ADDADR, SUBADR, DIFADR, MAKEADR, ADR, ROTATE,
                   SHIFT, CAST, TSIZE,
diff -Nrcpad gcc-15-20250712/gcc/m2/target-independent/m2/SYSTEM-pim.texi gcc-15-20250719/gcc/m2/target-independent/m2/SYSTEM-pim.texi
*** gcc-15-20250712/gcc/m2/target-independent/m2/SYSTEM-pim.texi	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/target-independent/m2/SYSTEM-pim.texi	Sat Jul 19 22:32:15 2025
***************
*** 3,9 ****
  DEFINITION MODULE SYSTEM ;
  
  EXPORT QUALIFIED BITSPERBYTE, BYTESPERWORD,
!                  ADDRESS, WORD, BYTE, CSIZE_T, CSSIZE_T, (* 
                   Target specific data types.  *)
                   ADR, TSIZE, ROTATE, SHIFT, THROW, TBITSIZE ;
                   (* SIZE is also exported if -fpim2 is used.  *)
--- 3,9 ----
  DEFINITION MODULE SYSTEM ;
  
  EXPORT QUALIFIED BITSPERBYTE, BYTESPERWORD,
!                  ADDRESS, WORD, BYTE, CSIZE_T, CSSIZE_T, COFF_T, CARDINAL64, (* 
                   Target specific data types.  *)
                   ADR, TSIZE, ROTATE, SHIFT, THROW, TBITSIZE ;
                   (* SIZE is also exported if -fpim2 is used.  *)
diff -Nrcpad gcc-15-20250712/gcc/m2/target-independent/m2/gm2-libs.texi gcc-15-20250719/gcc/m2/target-independent/m2/gm2-libs.texi
*** gcc-15-20250712/gcc/m2/target-independent/m2/gm2-libs.texi	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/m2/target-independent/m2/gm2-libs.texi	Sat Jul 19 22:32:15 2025
*************** type results in a number of equivalent m
*** 35,51 ****
--- 35,55 ----
  These modules have been extensively tested and are used throughout
  building the GNU Modula-2 compiler.
  @menu
+ * gm2-libs/ARRAYOFCHAR::ARRAYOFCHAR.def
  * 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/CFileSysOp::CFileSysOp.def
+ * gm2-libs/CHAR::CHAR.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/FileSysOp::FileSysOp.def
  * gm2-libs/FormatStrings::FormatStrings.def
  * gm2-libs/FpuIO::FpuIO.def
  * gm2-libs/GetOpt::GetOpt.def
*************** building the GNU Modula-2 compiler.
*** 76,82 ****
--- 80,88 ----
  * gm2-libs/StrCase::StrCase.def
  * gm2-libs/StrIO::StrIO.def
  * gm2-libs/StrLib::StrLib.def
+ * gm2-libs/String::String.def
  * gm2-libs/StringConvert::StringConvert.def
+ * gm2-libs/StringFileSysOp::StringFileSysOp.def
  * gm2-libs/SysExceptions::SysExceptions.def
  * gm2-libs/SysStorage::SysStorage.def
  * gm2-libs/TimeString::TimeString.def
*************** building the GNU Modula-2 compiler.
*** 95,101 ****
  * gm2-libs/wrapc::wrapc.def
  @end menu
  
! @node gm2-libs/ASCII, gm2-libs/Args, , Base libraries
  @subsection gm2-libs/ASCII
  
  @example
--- 101,130 ----
  * gm2-libs/wrapc::wrapc.def
  @end menu
  
! @node gm2-libs/ARRAYOFCHAR, gm2-libs/ASCII, , Base libraries
! @subsection gm2-libs/ARRAYOFCHAR
! 
! @example
! DEFINITION MODULE ARRAYOFCHAR ;
! 
! FROM FIO IMPORT File ;
! 
! 
! (*
!    Description: provides write procedures for ARRAY OF CHAR.
! *)
! 
! @findex Write
! PROCEDURE Write (f: File; str: ARRAY OF CHAR) ;
! @findex WriteLn
! PROCEDURE WriteLn (f: File) ;
! 
! 
! END ARRAYOFCHAR.
! @end example
! @page
! 
! @node gm2-libs/ASCII, gm2-libs/Args, gm2-libs/ARRAYOFCHAR, Base libraries
  @subsection gm2-libs/ASCII
  
  @example
*************** END Break.
*** 232,238 ****
  @end example
  @page
  
! @node gm2-libs/Builtins, gm2-libs/COROUTINES, gm2-libs/Break, Base libraries
  @subsection gm2-libs/Builtins
  
  @example
--- 261,267 ----
  @end example
  @page
  
! @node gm2-libs/Builtins, gm2-libs/CFileSysOp, gm2-libs/Break, Base libraries
  @subsection gm2-libs/Builtins
  
  @example
*************** PROCEDURE __BUILTIN__ strchr (s: ADDRESS
*** 584,589 ****
--- 613,627 ----
  @findex strrchr
  PROCEDURE __BUILTIN__ strrchr (s: ADDRESS; c: INTEGER) : ADDRESS ;
  
+ @findex clz
+ PROCEDURE __BUILTIN__ clz (value: CARDINAL) : INTEGER ;
+ @findex clzll
+ PROCEDURE __BUILTIN__ clzll (value: LONGCARD) : INTEGER ;
+ @findex ctz
+ PROCEDURE __BUILTIN__ ctz (value: CARDINAL) : INTEGER ;
+ @findex ctzll
+ PROCEDURE __BUILTIN__ ctzll (value: LONGCARD) : INTEGER ;
+ 
  (*
     longjmp - this GCC builtin restricts the val to always 1.
  *)
*************** END Builtins.
*** 632,638 ****
  @end example
  @page
  
! @node gm2-libs/COROUTINES, gm2-libs/CmdArgs, gm2-libs/Builtins, Base libraries
  @subsection gm2-libs/COROUTINES
  
  @example
--- 670,769 ----
  @end example
  @page
  
! @node gm2-libs/CFileSysOp, gm2-libs/CHAR, gm2-libs/Builtins, Base libraries
! @subsection gm2-libs/CFileSysOp
! 
! @example
! DEFINITION MODULE CFileSysOp ;
! 
! FROM SYSTEM IMPORT ADDRESS ;
! 
! 
! (*
!    Description: provides access to filesystem operations.
!                 The implementation module is written in C
!                 and the parameters behave as their C
!                 counterparts.
! *)
! 
! TYPE
! @findex AccessMode (type)
!    AccessMode = SET OF AccessStatus ;
! @findex AccessStatus (type)
!    AccessStatus = (F_OK, R_OK, W_OK, X_OK, A_FAIL) ;
! 
! 
! @findex Unlink
! PROCEDURE Unlink (filename: ADDRESS) : INTEGER ;
! 
! 
! (*
!    Access - test access to a path or file.  The behavior is
!             the same as defined in access(2).  Except that
!             on A_FAIL is only used during the return result
!             indicating the underlying C access has returned
!             -1 (and errno can be checked).
! *)
! 
! @findex Access
! PROCEDURE Access (pathname: ADDRESS; mode: AccessMode) : AccessMode ;
! 
! 
! (* Return TRUE if the caller can see the existance of the file or
!    directory on the filesystem.  *)
! 
! (*
!    IsDir - return true if filename is a regular directory.
! *)
! 
! @findex IsDir
! PROCEDURE IsDir (dirname: ADDRESS) : BOOLEAN ;
! 
! 
! (*
!    IsFile - return true if filename is a regular file.
! *)
! 
! @findex IsFile
! PROCEDURE IsFile (filename: ADDRESS) : BOOLEAN ;
! 
! 
! (*
!    Exists - return true if pathname exists.
! *)
! 
! @findex Exists
! PROCEDURE Exists (pathname: ADDRESS) : BOOLEAN ;
! 
! 
! END CFileSysOp.
! @end example
! @page
! 
! @node gm2-libs/CHAR, gm2-libs/COROUTINES, gm2-libs/CFileSysOp, Base libraries
! @subsection gm2-libs/CHAR
! 
! @example
! DEFINITION MODULE CHAR ;
! 
! FROM FIO IMPORT File ;
! 
! 
! (*
!    Write a single character ch to file f.
! *)
! 
! @findex Write
! PROCEDURE Write (f: File; ch: CHAR) ;
! @findex WriteLn
! PROCEDURE WriteLn (f: File) ;
! 
! 
! END CHAR.
! @end example
! @page
! 
! @node gm2-libs/COROUTINES, gm2-libs/CmdArgs, gm2-libs/CHAR, Base libraries
  @subsection gm2-libs/COROUTINES
  
  @example
*************** END Environment.
*** 1179,1185 ****
  @end example
  @page
  
! @node gm2-libs/FIO, gm2-libs/FormatStrings, gm2-libs/Environment, Base libraries
  @subsection gm2-libs/FIO
  
  @example
--- 1310,1316 ----
  @end example
  @page
  
! @node gm2-libs/FIO, gm2-libs/FileSysOp, gm2-libs/Environment, Base libraries
  @subsection gm2-libs/FIO
  
  @example
*************** END FIO.
*** 1543,1549 ****
  @end example
  @page
  
! @node gm2-libs/FormatStrings, gm2-libs/FpuIO, gm2-libs/FIO, Base libraries
  @subsection gm2-libs/FormatStrings
  
  @example
--- 1674,1710 ----
  @end example
  @page
  
! @node gm2-libs/FileSysOp, gm2-libs/FormatStrings, gm2-libs/FIO, Base libraries
! @subsection gm2-libs/FileSysOp
! 
! @example
! DEFINITION MODULE FileSysOp ;
! 
! FROM CFileSysOp IMPORT AccessMode ;
! 
! 
! (*
!    Description: provides access to filesystem operations using
!                 Modula-2 base types.
! *)
! 
! @findex Exists
! PROCEDURE Exists (filename: ARRAY OF CHAR) : BOOLEAN ;
! @findex IsDir
! PROCEDURE IsDir (dirname: ARRAY OF CHAR) : BOOLEAN ;
! @findex IsFile
! PROCEDURE IsFile (filename: ARRAY OF CHAR) : BOOLEAN ;
! @findex Unlink
! PROCEDURE Unlink (filename: ARRAY OF CHAR) : BOOLEAN ;
! @findex Access
! PROCEDURE Access (pathname: ARRAY OF CHAR; mode: AccessMode) : AccessMode ;
! 
! 
! END FileSysOp.
! @end example
! @page
! 
! @node gm2-libs/FormatStrings, gm2-libs/FpuIO, gm2-libs/FileSysOp, Base libraries
  @subsection gm2-libs/FormatStrings
  
  @example
*************** PROCEDURE ForeachIndiceInIndexDo (i: Ind
*** 1986,1991 ****
--- 2147,2161 ----
  PROCEDURE IsEmpty (i: Index) : BOOLEAN ;
  
  
+ (*
+    FindIndice - returns the indice containing a.
+                 It returns zero if a is not found in array i.
+ *)
+ 
+ @findex FindIndice
+ PROCEDURE FindIndice (i: Index; a: ADDRESS) : CARDINAL ;
+ 
+ 
  END Indexing.
  @end example
  @page
*************** END SMathLib0.
*** 3303,3309 ****
  DEFINITION MODULE SYSTEM ;
  
  EXPORT QUALIFIED BITSPERBYTE, BYTESPERWORD,
!                  ADDRESS, WORD, BYTE, CSIZE_T, CSSIZE_T, (* 
                   Target specific data types.  *)
                   ADR, TSIZE, ROTATE, SHIFT, THROW, TBITSIZE ;
                   (* SIZE is also exported if -fpim2 is used.  *)
--- 3473,3479 ----
  DEFINITION MODULE SYSTEM ;
  
  EXPORT QUALIFIED BITSPERBYTE, BYTESPERWORD,
!                  ADDRESS, WORD, BYTE, CSIZE_T, CSSIZE_T, COFF_T, CARDINAL64, (* 
                   Target specific data types.  *)
                   ADR, TSIZE, ROTATE, SHIFT, THROW, TBITSIZE ;
                   (* SIZE is also exported if -fpim2 is used.  *)
*************** END StrIO.
*** 3872,3878 ****
  @end example
  @page
  
! @node gm2-libs/StrLib, gm2-libs/StringConvert, gm2-libs/StrIO, Base libraries
  @subsection gm2-libs/StrLib
  
  @example
--- 4042,4048 ----
  @end example
  @page
  
! @node gm2-libs/StrLib, gm2-libs/String, gm2-libs/StrIO, Base libraries
  @subsection gm2-libs/StrLib
  
  @example
*************** END StrLib.
*** 3946,3952 ****
  @end example
  @page
  
! @node gm2-libs/StringConvert, gm2-libs/SysExceptions, gm2-libs/StrLib, Base libraries
  @subsection gm2-libs/StringConvert
  
  @example
--- 4116,4140 ----
  @end example
  @page
  
! @node gm2-libs/String, gm2-libs/StringConvert, gm2-libs/StrLib, Base libraries
! @subsection gm2-libs/String
! 
! @example
! DEFINITION MODULE String ;
! 
! FROM DynamicStrings IMPORT String ;
! FROM FIO IMPORT File ;
! 
! @findex Write
! PROCEDURE Write (f: File; str: String) ;
! @findex WriteLn
! PROCEDURE WriteLn (f: File) ;
! 
! END String.
! @end example
! @page
! 
! @node gm2-libs/StringConvert, gm2-libs/StringFileSysOp, gm2-libs/String, Base libraries
  @subsection gm2-libs/StringConvert
  
  @example
*************** END StringConvert.
*** 4290,4296 ****
  @end example
  @page
  
! @node gm2-libs/SysExceptions, gm2-libs/SysStorage, gm2-libs/StringConvert, Base libraries
  @subsection gm2-libs/SysExceptions
  
  @example
--- 4478,4510 ----
  @end example
  @page
  
! @node gm2-libs/StringFileSysOp, gm2-libs/SysExceptions, gm2-libs/StringConvert, Base libraries
! @subsection gm2-libs/StringFileSysOp
! 
! @example
! DEFINITION MODULE StringFileSysOp ;
! 
! FROM DynamicStrings IMPORT String ;
! FROM CFileSysOp IMPORT AccessMode ;
! 
! 
! @findex Exists
! PROCEDURE Exists (filename: String) : BOOLEAN ;
! @findex IsDir
! PROCEDURE IsDir (dirname: String) : BOOLEAN ;
! @findex IsFile
! PROCEDURE IsFile (filename: String) : BOOLEAN ;
! @findex Unlink
! PROCEDURE Unlink (filename: String) : BOOLEAN ;
! @findex Access
! PROCEDURE Access (pathname: String; mode: AccessMode) : AccessMode ;
! 
! 
! END StringFileSysOp.
! @end example
! @page
! 
! @node gm2-libs/SysExceptions, gm2-libs/SysStorage, gm2-libs/StringFileSysOp, Base libraries
  @subsection gm2-libs/SysExceptions
  
  @example
*************** EXPORT UNQUALIFIED alloca, memcpy,
*** 4476,4482 ****
                     index, rindex,
                     memcmp, memset, memmove,
                     strcat, strncat, strcpy, strncpy, strcmp, strncmp,
!                    strlen, strstr, strpbrk, strspn, strcspn, strchr, strrchr ;
  
  @findex alloca
  PROCEDURE alloca (i: CARDINAL) : ADDRESS ;
--- 4690,4699 ----
                     index, rindex,
                     memcmp, memset, memmove,
                     strcat, strncat, strcpy, strncpy, strcmp, strncmp,
!                    strlen, strstr, strpbrk, strspn, strcspn, strchr, strrchr,
! 
!                    clz, clzll,
!                    ctz, ctzll ;
  
  @findex alloca
  PROCEDURE alloca (i: CARDINAL) : ADDRESS ;
*************** PROCEDURE strchr (s: ADDRESS; c: INTEGER
*** 4732,4737 ****
--- 4949,4964 ----
  @findex strrchr
  PROCEDURE strrchr (s: ADDRESS; c: INTEGER) : ADDRESS ;
  
+ @findex clz
+ PROCEDURE clz (value: CARDINAL) : INTEGER ;
+ @findex clzll
+ PROCEDURE clzll (value: CARDINAL) : INTEGER ;
+ @findex ctz
+ PROCEDURE ctz (value: CARDINAL) : INTEGER ;
+ @findex ctzll
+ PROCEDURE ctzll (value: CARDINAL) : INTEGER ;
+ 
+ 
  END cbuiltin.
  @end example
  @page
*************** PROCEDURE strtod (s: ADDRESS; VAR error:
*** 4893,4899 ****
  
  @findex dtoa
  PROCEDURE dtoa (d        : REAL;
!                 mode     : Mode;
                  ndigits  : INTEGER;
  	        VAR decpt: INTEGER;
  	        VAR sign : BOOLEAN) : ADDRESS ;
--- 5120,5126 ----
  
  @findex dtoa
  PROCEDURE dtoa (d        : REAL;
!                 mode     : INTEGER;
                  ndigits  : INTEGER;
  	        VAR decpt: INTEGER;
  	        VAR sign : BOOLEAN) : ADDRESS ;
*************** PROCEDURE strtold (s: ADDRESS; VAR error
*** 4999,5005 ****
  
  @findex ldtoa
  PROCEDURE ldtoa (d        : LONGREAL;
!                  mode     : Mode;
                   ndigits  : INTEGER;
                   VAR decpt: INTEGER;
                   VAR sign : BOOLEAN) : ADDRESS ;
--- 5226,5232 ----
  
  @findex ldtoa
  PROCEDURE ldtoa (d        : LONGREAL;
!                  mode     : INTEGER;
                   ndigits  : INTEGER;
                   VAR decpt: INTEGER;
                   VAR sign : BOOLEAN) : ADDRESS ;
*************** END ldtoa.
*** 5015,5023 ****
  @example
  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,
--- 5242,5252 ----
  @example
  DEFINITION MODULE FOR "C" libc ;
  
! FROM SYSTEM IMPORT ADDRESS, CSIZE_T, CSSIZE_T, COFF_T ;
  
  EXPORT UNQUALIFIED time_t, timeb, tm, ptrToTM,
+                    atof, atoi, atol, atoll,
+                    strtod, strtof, strtold, strtol, strtoll, strtoul, strtoull,
                     write, read,
                     system, abort,
                     malloc, free,
*************** TYPE
*** 5072,5077 ****
--- 5301,5399 ----
  
  
  (*
+      double atof(const char *nptr)
+ *)
+ 
+ @findex atof
+ PROCEDURE atof (nptr: ADDRESS) : REAL ;
+ 
+ 
+ (*
+      int atoi(const char *nptr)
+ *)
+ 
+ @findex atoi
+ PROCEDURE atoi (nptr: ADDRESS) : INTEGER ;
+ 
+ 
+ (*
+      long atol(const char *nptr);
+ *)
+ 
+ @findex atol
+ PROCEDURE atol (nptr: ADDRESS) : CSSIZE_T ;
+ 
+ 
+ (*
+      long long atoll(const char *nptr);
+ *)
+ 
+ @findex atoll
+ PROCEDURE atoll (nptr: ADDRESS) : LONGINT ;
+ 
+ 
+ (*
+      double strtod(const char *restrict nptr, char **_Nullable restrict endptr)
+ *)
+ 
+ @findex strtod
+ PROCEDURE strtod (nptr, endptr: ADDRESS) : REAL ;
+ 
+ 
+ (*
+      float strtof(const char *restrict nptr, char **_Nullable restrict endptr)
+ *)
+ 
+ @findex strtof
+ PROCEDURE strtof (nptr, endptr: ADDRESS) : SHORTREAL ;
+ 
+ 
+ (*
+      long double strtold(const char *restrict nptr,
+                          char **_Nullable restrict endptr)
+ *)
+ 
+ @findex strtold
+ PROCEDURE strtold (nptr, endptr: ADDRESS) : LONGREAL ;
+ 
+ 
+ (*
+      long strtol(const char *restrict nptr, char **_Nullable restrict endptr,
+                  int base)
+ *)
+ 
+ @findex strtol
+ PROCEDURE strtol (nptr, endptr: ADDRESS; base: INTEGER) : CSSIZE_T ;
+ 
+ 
+ (*
+      long long strtoll(const char *restrict nptr,
+                        char **_Nullable restrict endptr, int base)
+ *)
+ 
+ @findex strtoll
+ PROCEDURE strtoll (nptr, endptr: ADDRESS; base: INTEGER) : LONGINT ;
+ 
+ 
+ (*
+      unsigned long strtoul(const char *restrict nptr,
+                            char **_Nullable restrict endptr, int base)
+ *)
+ 
+ @findex strtoul
+ PROCEDURE strtoul (nptr, endptr: ADDRESS; base: INTEGER) : CSIZE_T ;
+ 
+ 
+ (*
+      unsigned long long strtoull(const char *restrict nptr,
+                                  char **_Nullable restrict endptr, int base)
+ *)
+ 
+ @findex strtoull
+ PROCEDURE strtoull (nptr, endptr: ADDRESS; base: INTEGER) : LONGCARD ;
+ 
+ 
+ (*
       ssize_t write (int d, void *buf, size_t nbytes)
  *)
  
*************** PROCEDURE close (d: INTEGER) : [ INTEGER
*** 5222,5228 ****
  *)
  
  @findex open
! PROCEDURE open (filename: ADDRESS; oflag: INTEGER; ...) : INTEGER ;
  
  
  (*
--- 5544,5550 ----
  *)
  
  @findex open
! PROCEDURE open (filename: ADDRESS; oflag: INTEGER; mode: INTEGER) : INTEGER ;
  
  
  (*
*************** PROCEDURE creat (filename: ADDRESS; mode
*** 5240,5246 ****
  *)
  
  @findex lseek
! PROCEDURE lseek (fd: INTEGER; offset: CSSIZE_T; whence: INTEGER) : [ CSSIZE_T ] ;
  
  
  (*
--- 5562,5568 ----
  *)
  
  @findex lseek
! PROCEDURE lseek (fd: INTEGER; offset: COFF_T; whence: INTEGER) : [ COFF_T ] ;
  
  
  (*
*************** PROCEDURE BlockMoveBackward (dest, src:
*** 6720,6726 ****
  
  
  (*
!    BlockClear - fills, block..block+n-1, with zero's.
  *)
  
  @findex BlockClear
--- 7042,7048 ----
  
  
  (*
!    BlockClear - fills, block..block+n-1, with zeros.
  *)
  
  @findex BlockClear
*************** PROCEDURE Doio (VAR f: File) ;
*** 7381,7387 ****
  *)
  
  @findex FileNameChar
! PROCEDURE FileNameChar (ch: CHAR) ;
  
  
  END FileSystem.
--- 7703,7709 ----
  *)
  
  @findex FileNameChar
! PROCEDURE FileNameChar (ch: CHAR) : CHAR ;
  
  
  END FileSystem.
*************** VAR
*** 7512,7518 ****
  
  (*
     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.
  *)
--- 7834,7840 ----
  
  (*
     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 CloseInput ;
*** 7532,7538 ****
  
  (*
     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.
  *)
--- 7854,7860 ----
  
  (*
     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.
  *)
*************** EXPORT QUALIFIED SEMAPHORE, DESCRIPTOR,
*** 8424,8430 ****
  
  TYPE
  @findex SEMAPHORE (type)
!    SEMAPHORE ;         (* defines Dijkstra's semaphores *)
  @findex DESCRIPTOR (type)
     DESCRIPTOR ;        (* handle onto a process         *)
  
--- 8746,8752 ----
  
  TYPE
  @findex SEMAPHORE (type)
!    SEMAPHORE ;         (* defines Dijkstras semaphores  *)
  @findex DESCRIPTOR (type)
     DESCRIPTOR ;        (* handle onto a process         *)
  
*************** PROCEDURE InitSemaphore (v: CARDINAL; Na
*** 8483,8489 ****
  
  
  (*
!    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.
--- 8805,8811 ----
  
  
  (*
!    Wait - performs dijkstras 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) ;
*** 8494,8500 ****
  
  
  (*
!    Signal - performs dijkstra's V operation on a semaphore.
              A process which calls the procedure will increment
              the semaphores value.
  *)
--- 8816,8822 ----
  
  
  (*
!    Signal - performs dijkstras V operation on a semaphore.
              A process which calls the procedure will increment
              the semaphores value.
  *)
*************** DEFINITION MODULE SYSTEM ;
*** 8621,8627 ****
  FROM COROUTINES IMPORT PROTECTION ;
  
  EXPORT QUALIFIED (* the following are built into the compiler: *)
!                  ADDRESS, WORD, BYTE, CSIZE_T, CSSIZE_T, (* 
                   Target specific data types. *)
                   ADR, TSIZE, ROTATE, SHIFT, THROW, TBITSIZE,
                   (* SIZE is exported depending upon -fpim2 and
--- 8943,8949 ----
  FROM COROUTINES IMPORT PROTECTION ;
  
  EXPORT QUALIFIED (* the following are built into the compiler: *)
!                  ADDRESS, WORD, BYTE, CSIZE_T, CSSIZE_T, COFF_T, (* 
                   Target specific data types. *)
                   ADR, TSIZE, ROTATE, SHIFT, THROW, TBITSIZE,
                   (* SIZE is exported depending upon -fpim2 and
*************** DEFINITION MODULE SYSTEM;
*** 13322,13328 ****
    (* The constants and types define underlying properties of storage *)
  
  EXPORT QUALIFIED BITSPERLOC, LOCSPERWORD,
!                  LOC, BYTE, WORD, ADDRESS, CSIZE_T, CSSIZE_T, (* 
                   Target specific data types.  *)
                   ADDADR, SUBADR, DIFADR, MAKEADR, ADR, ROTATE,
                   SHIFT, CAST, TSIZE,
--- 13644,13650 ----
    (* The constants and types define underlying properties of storage *)
  
  EXPORT QUALIFIED BITSPERLOC, LOCSPERWORD,
!                  LOC, BYTE, WORD, ADDRESS, CSIZE_T, CSSIZE_T, COFF_T, (* 
                   Target specific data types.  *)
                   ADDADR, SUBADR, DIFADR, MAKEADR, ADR, ROTATE,
                   SHIFT, CAST, TSIZE,
*************** IMPORT IOChan ;
*** 14878,14889 ****
  PROCEDURE SkipSpaces (cid: IOChan.ChanId) ;
  
  
! (* The following procedures do not read past line marks.  *)
  
  @findex CharAvailable
  PROCEDURE CharAvailable (cid: IOChan.ChanId) : BOOLEAN ;
  
  
  @findex EofOrEoln
  PROCEDURE EofOrEoln (cid: IOChan.ChanId) : BOOLEAN ;
  
--- 15200,15215 ----
  PROCEDURE SkipSpaces (cid: IOChan.ChanId) ;
  
  
! (* CharAvailable returns TRUE if IOChan.ReadResult is notKnown or
!    allRight.  *)
  
  @findex CharAvailable
  PROCEDURE CharAvailable (cid: IOChan.ChanId) : BOOLEAN ;
  
  
+ (* EofOrEoln returns TRUE if IOChan.ReadResult is endOfLine or
+    endOfInput.  *)
+ 
  @findex EofOrEoln
  PROCEDURE EofOrEoln (cid: IOChan.ChanId) : BOOLEAN ;
  
diff -Nrcpad gcc-15-20250712/gcc/params.opt gcc-15-20250719/gcc/params.opt
*** gcc-15-20250712/gcc/params.opt	Sat Jul 12 22:32:32 2025
--- gcc-15-20250719/gcc/params.opt	Sat Jul 19 22:32:15 2025
*************** Common Joined UInteger Var(param_uninit_
*** 1181,1187 ****
  Maximum number of nested calls to search for control dependencies during uninitialized variable analysis.
  
  -param=uninit-max-chain-len=
! Common Joined UInteger Var(param_uninit_max_chain_len) Init(8) IntegerRange(1, 128) Param Optimization
  Maximum number of predicates anded for each predicate ored in the normalized
  predicate chain.
  
--- 1181,1187 ----
  Maximum number of nested calls to search for control dependencies during uninitialized variable analysis.
  
  -param=uninit-max-chain-len=
! Common Joined UInteger Var(param_uninit_max_chain_len) Init(12) IntegerRange(1, 128) Param Optimization
  Maximum number of predicates anded for each predicate ored in the normalized
  predicate chain.
  
diff -Nrcpad gcc-15-20250712/gcc/rust/ChangeLog gcc-15-20250719/gcc/rust/ChangeLog
*** gcc-15-20250712/gcc/rust/ChangeLog	Sat Jul 12 22:32:33 2025
--- gcc-15-20250719/gcc/rust/ChangeLog	Sat Jul 19 22:32:16 2025
***************
*** 1,3 ****
--- 1,27 ----
+ 2025-07-18  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-06-26  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
+ 	(BorrowCheckerDiagnostics::get_loan): Type cast loan to uint32_t.
+ 
+ 2025-07-18  Owen Avery  <powerboat9.gamer@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-04-28  Owen Avery  <powerboat9.gamer@gmail.com>
+ 
+ 	* checks/errors/borrowck/rust-bir-place.h
+ 	(IndexVec::size_type): Add.
+ 	(IndexVec::MAX_INDEX): Add.
+ 	(IndexVec::size): Change the return type to the type of the
+ 	internal value used by the index type.
+ 	(PlaceDB::lookup_or_add_variable): Use the return value from the
+ 	PlaceDB::add_place call.
+ 	* checks/errors/borrowck/rust-bir.h
+ 	(struct BasicBlockId): Move this definition before the
+ 	definition of the struct Function.
+ 
  2025-07-08  Arthur Cohen  <arthur.cohen@embecosm.com>
  
  	* resolve/rust-late-name-resolver-2.0.cc (Late::Late): False initialize the
diff -Nrcpad gcc-15-20250712/gcc/rust/checks/errors/borrowck/rust-bir-place.h gcc-15-20250719/gcc/rust/checks/errors/borrowck/rust-bir-place.h
*** gcc-15-20250712/gcc/rust/checks/errors/borrowck/rust-bir-place.h	Sat Jul 12 22:32:33 2025
--- gcc-15-20250719/gcc/rust/checks/errors/borrowck/rust-bir-place.h	Sat Jul 19 22:32:16 2025
*************** template <typename I, typename T> class
*** 204,209 ****
--- 204,212 ----
  {
    std::vector<T> internal_vector;
  
+   typedef decltype (std::declval<I> ().value) size_type;
+   static constexpr auto MAX_INDEX = std::numeric_limits<size_type>::max ();
+ 
  public:
    IndexVec () = default;
    IndexVec (size_t size) { internal_vector.reserve (size); }
*************** public:
*** 219,225 ****
      internal_vector.emplace_back (std::forward<Args> (args)...);
    }
  
!   size_t size () const { return internal_vector.size (); }
  
    std::vector<T> &get_vector () { return internal_vector; }
  };
--- 222,232 ----
      internal_vector.emplace_back (std::forward<Args> (args)...);
    }
  
!   size_type size () const
!   {
!     rust_assert (internal_vector.size () < MAX_INDEX);
!     return static_cast<size_type> (internal_vector.size ());
!   }
  
    std::vector<T> &get_vector () { return internal_vector; }
  };
*************** public:
*** 418,425 ****
      if (lookup != INVALID_PLACE)
        return lookup;
  
!     add_place ({Place::VARIABLE, id, {}, is_type_copy (tyty), tyty});
!     return {places.size () - 1};
    };
  
    template <typename FN> void for_each_path_from_root (PlaceId var, FN fn) const
--- 425,431 ----
      if (lookup != INVALID_PLACE)
        return lookup;
  
!     return add_place ({Place::VARIABLE, id, {}, is_type_copy (tyty), tyty});
    };
  
    template <typename FN> void for_each_path_from_root (PlaceId var, FN fn) const
diff -Nrcpad gcc-15-20250712/gcc/rust/checks/errors/borrowck/rust-bir.h gcc-15-20250719/gcc/rust/checks/errors/borrowck/rust-bir.h
*** gcc-15-20250712/gcc/rust/checks/errors/borrowck/rust-bir.h	Sat Jul 12 22:32:33 2025
--- gcc-15-20250719/gcc/rust/checks/errors/borrowck/rust-bir.h	Sat Jul 19 22:32:16 2025
*************** using BasicBlocks = IndexVec<BasicBlockI
*** 35,40 ****
--- 35,60 ----
  class Statement;
  class AbstractExpr;
  
+ /** Unique identifier for a basic block in the BIR. */
+ struct BasicBlockId
+ {
+   uint32_t value;
+   // some overloads for comparision
+   bool operator== (const BasicBlockId &rhs) const { return value == rhs.value; }
+   bool operator!= (const BasicBlockId &rhs) const
+   {
+     return !(operator== (rhs));
+   }
+   bool operator< (const BasicBlockId &rhs) const { return value < rhs.value; }
+   bool operator> (const BasicBlockId &rhs) const { return value > rhs.value; }
+   bool operator<= (const BasicBlockId &rhs) const { return !(operator> (rhs)); }
+   bool operator>= (const BasicBlockId &rhs) const { return !(operator< (rhs)); }
+ };
+ 
+ static constexpr BasicBlockId INVALID_BB
+   = {std::numeric_limits<uint32_t>::max ()};
+ static constexpr BasicBlockId ENTRY_BASIC_BLOCK = {0};
+ 
  /**
   * Top-level entity of the Borrow-checker IR (BIR).
   * It represents a single function (method, closure, etc.), which is the
*************** public:
*** 132,157 ****
    WARN_UNUSED_RESULT location_t get_location () const { return location; }
  };
  
- /** Unique identifier for a basic block in the BIR. */
- struct BasicBlockId
- {
-   uint32_t value;
-   // some overloads for comparision
-   bool operator== (const BasicBlockId &rhs) const { return value == rhs.value; }
-   bool operator!= (const BasicBlockId &rhs) const
-   {
-     return !(operator== (rhs));
-   }
-   bool operator< (const BasicBlockId &rhs) const { return value < rhs.value; }
-   bool operator> (const BasicBlockId &rhs) const { return value > rhs.value; }
-   bool operator<= (const BasicBlockId &rhs) const { return !(operator> (rhs)); }
-   bool operator>= (const BasicBlockId &rhs) const { return !(operator< (rhs)); }
- };
- 
- static constexpr BasicBlockId INVALID_BB
-   = {std::numeric_limits<uint32_t>::max ()};
- static constexpr BasicBlockId ENTRY_BASIC_BLOCK = {0};
- 
  struct BasicBlock
  {
    // BIR "instructions".
--- 152,157 ----
diff -Nrcpad gcc-15-20250712/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc gcc-15-20250719/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
*** gcc-15-20250712/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc	Sat Jul 12 22:32:33 2025
--- gcc-15-20250719/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc	Sat Jul 19 22:32:16 2025
*************** BorrowCheckerDiagnostics::get_statement
*** 142,148 ****
  const BIR::Loan &
  BorrowCheckerDiagnostics::get_loan (Polonius::Loan loan)
  {
!   return bir_function.place_db.get_loans ()[{loan}];
  }
  
  const HIR::LifetimeParam *
--- 142,148 ----
  const BIR::Loan &
  BorrowCheckerDiagnostics::get_loan (Polonius::Loan loan)
  {
!   return bir_function.place_db.get_loans ()[{(uint32_t) loan}];
  }
  
  const HIR::LifetimeParam *
diff -Nrcpad gcc-15-20250712/gcc/testsuite/ChangeLog gcc-15-20250719/gcc/testsuite/ChangeLog
*** gcc-15-20250712/gcc/testsuite/ChangeLog	Sat Jul 12 22:32:33 2025
--- gcc-15-20250719/gcc/testsuite/ChangeLog	Sat Jul 19 22:32:16 2025
***************
*** 1,3 ****
--- 1,270 ----
+ 2025-07-18  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-04-19  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	PR testsuite/119508
+ 	* rust/compile/nr2/compile.exp: Disable parallel testing.
+ 
+ 2025-07-18  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-04-18  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	PR cobol/119818
+ 	* cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob:
+ 	'dg-set-target-env-var TZ UTC0'.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/120924
+ 	* gcc.dg/uninit-pr120924.c: New testcase.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-15  Richard Biener  <rguenther@suse.de>
+ 		    Richard Sandiford   <richard.sandiford@arm.com>
+ 
+ 	PR tree-optimization/121059
+ 	* gcc.dg/vect/pr121059.c: New testcase.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-16  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121049
+ 	* gcc.dg/vect/pr121049.c: New testcase.
+ 
+ 2025-07-18  Richard Biener  <rguenther@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-17  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/121035
+ 	* gcc.dg/pr121035.c: New testcase.
+ 
+ 2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-29  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/117203
+ 	* gm2/isolib/run/pass/testdelete2.mod: New test.
+ 	* gm2/pimlib/logitech/run/pass/testdelete2.mod: New test.
+ 	* gm2/pimlib/run/pass/testdelete.mod: New test.
+ 
+ 2025-07-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-07-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/121131
+ 	* gcc.dg/bitint-124.c: New test.
+ 
+ 2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-22  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120731
+ 	* gm2/pimlib/logitech/run/pass/teststrings.mod: New test.
+ 
+ 2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120673
+ 	* gm2/pim/fail/badmodvar.mod: New test.
+ 	* gm2/pim/fail/cyclictypes.mod: New test.
+ 	* gm2/pim/fail/cyclictypes2.mod: New test.
+ 	* gm2/pim/fail/cyclictypes4.mod: New test.
+ 
+ 2025-07-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-09  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120606
+ 	* gm2/pim/pass/forarray.mod: New test.
+ 
+ 2025-07-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-07  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/119650
+ 	* gm2/iso/fail/CHAR.mod: New test.
+ 	* gm2/iso/run/pass/CHAR.mod: New test.
+ 	* gm2/iso/run/pass/importself.mod: New test.
+ 	* gm2/pimlib/run/pass/testwrite.mod: New test.
+ 	* gm2/pimlib/run/pass/testwritechar.mod: New test.
+ 
+ 2025-07-17  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/87097
+ 	* g++.dg/cpp0x/constexpr-array29.C: New test.
+ 
+ 2025-07-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-06  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120542
+ 	* gm2/iso/fail/badreturn.mod: New test.
+ 	* gm2/iso/fail/badreturn2.mod: New test.
+ 	* gm2/iso/pass/modulereturn.mod: New test.
+ 	* gm2/iso/pass/modulereturn2.mod: New test.
+ 
+ 2025-07-17  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Backported from master:
+ 	2025-07-04  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/120807
+ 	* gcc.c-torture/compile/pr120807.c: New test.
+ 
+ 2025-07-16  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-01  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120497
+ 	* gm2/pim/pass/ReturnType.mod: New test.
+ 	* gm2/pim/pass/ReturnType2.mod: New test.
+ 
+ 2025-07-16  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-31  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120389
+ 	* gm2/pim/fail/testcharint.mod: New test.
+ 	* gm2/pim/fail/testindrx.mod: New test.
+ 	* gm2/pim/pass/testxindr.mod: New test.
+ 	* gm2/pim/pass/testxindr2.mod: New test.
+ 	* gm2/pim/pass/testxindr3.mod: New test.
+ 
+ 2025-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-07-16  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/121060
+ 	* gfortran.dg/associate_75.f90: New test.
+ 
+ 2025-07-16  Haochen Jiang  <haochen.jiang@intel.com>
+ 
+ 	* gcc.target/i386/amxavx512-cvtrowd2ps-2.c: Add -mavx512fp16 to
+ 	use FP16 related intrins for convert.
+ 	* gcc.target/i386/amxavx512-cvtrowps2bf16-2.c: Ditto.
+ 	* gcc.target/i386/amxavx512-cvtrowps2ph-2.c: Ditto.
+ 	* gcc.target/i386/amxavx512-movrow-2.c: Ditto.
+ 
+ 2025-07-15  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-22  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/120389
+ 	* gm2/iso/fail/badarray3.mod: New test.
+ 
+ 2025-07-15  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-07-15  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 
+ 	PR fortran/104428
+ 	* gfortran.dg/gomp/pr104428.f90: New.
+ 
+ 2025-07-15  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-07-08  Andre Vehreschild  <vehre@gcc.gnu.org>
+ 
+ 	PR fortran/120637
+ 	* gfortran.dg/asan/finalize_1.f90: New test.
+ 
+ 2025-07-15  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	Backported from master:
+ 	2025-07-07  Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR middle-end/120709
+ 	* gcc.dg/crc-non-cst-poly-1.c: New test.
+ 
+ 2025-07-14  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	Backported from master:
+ 	2025-07-10  Kyrylo Tkachov  <ktkachov@nvidia.com>
+ 
+ 	PR target/120999
+ 	* gcc.target/aarch64/sve2/pr120999.c: New test.
+ 
+ 2025-07-14  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	Backported from master:
+ 	2025-06-30  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR rtl-optimization/120242
+ 	PR rtl-optimization/120627
+ 	PR rtl-optimization/120736
+ 	PR rtl-optimization/120813
+ 	* gcc.dg/torture/pr120242.c: New test.
+ 	* gcc.dg/torture/pr120627.c: Likewise.
+ 	* gcc.dg/torture/pr120736.c: Likewise.
+ 	* gcc.dg/torture/pr120813.c: Likewise.
+ 
+ 2025-07-14  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	Backported from master:
+ 	2025-07-04  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	PR target/118241
+ 	* gcc.target/riscv/pr118241-b.cc: New test.
+ 
+ 2025-07-14  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	Backported from master:
+ 	2025-06-21  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/118241
+ 	* gcc.target/riscv/pr118241.c: New test.
+ 
+ 2025-07-14  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/deref4.adb: New test.
+ 	* gnat.dg/deref4_pkg.ads: New helper.
+ 
+ 2025-07-14  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-07-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/120908
+ 	* gcc.target/i386/pr120908.c: New test.
+ 
+ 2025-07-13  Alexey Merzlyakov  <alexey.merzlyakov@samsung.com>
+ 
+ 	Backported from master:
+ 	2025-07-02  Alexey Merzlyakov  <alexey.merzlyakov@samsung.com>
+ 
+ 	PR target/120356
+ 	* gcc.target/riscv/rvv/autovec/pr120356.c: New test.
+ 
+ 2025-07-13  Andreas Schwab  <schwab@suse.de>
+ 
+ 	Backported from master:
+ 	2025-07-08  Andreas Schwab  <schwab@suse.de>
+ 
+ 	PR target/120995
+ 	* gcc.target/riscv/amo/zabha-zacas-atomic-cas.c: New test.
+ 
  2025-07-11  Jakub Jelinek  <jakub@redhat.com>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250712/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob gcc-15-20250719/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
*** gcc-15-20250712/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob	Sat Jul 12 22:32:34 2025
--- gcc-15-20250719/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob	Sat Jul 19 22:32:17 2025
***************
*** 1,4 ****
--- 1,5 ----
         *> { dg-do run }
+        *> { dg-set-target-env-var TZ UTC0 }
  
          identification division.
          program-id. test.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C gcc-15-20250719/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C
*** gcc-15-20250712/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/g++.dg/cpp0x/constexpr-array29.C	Sat Jul 19 22:32:17 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/87097
+ // { dg-do compile { target c++11 } }
+ 
+ struct A {
+   constexpr A() : data() {}
+   struct X { int n; };
+   X data[2];
+ };
+ 
+ static_assert((A(), true), "");
+ static_assert(A().data[0].n == 0, "");
+ static_assert(A().data[1].n == 0, "");
+ constexpr A x;
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.c-torture/compile/pr120807.c gcc-15-20250719/gcc/testsuite/gcc.c-torture/compile/pr120807.c
*** gcc-15-20250712/gcc/testsuite/gcc.c-torture/compile/pr120807.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.c-torture/compile/pr120807.c	Sat Jul 19 22:32:21 2025
***************
*** 0 ****
--- 1,20 ----
+ typedef __UINT8_TYPE__ uint8_t;
+ typedef __UINT32_TYPE__ uint32_t;
+ 
+ typedef struct
+ {
+   uint32_t dword[2];
+   uint8_t byte[8];
+ } reg64_t;
+ reg64_t TestF20F_opgd, TestF20F_oped;
+ 
+ void
+ TestF20F ()
+ {
+   TestF20F_opgd.dword[0] ^= TestF20F_oped.byte[0];
+   for (int i = 0; i < 8; i++)
+     if (TestF20F_opgd.dword[0] & 1)
+       TestF20F_opgd.dword[0] = TestF20F_opgd.dword[0] >> 1 ^ (uint32_t)2197175160UL;
+     else
+       TestF20F_opgd.dword[0] = TestF20F_opgd.dword[0] >> 1;
+ }
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.dg/bitint-124.c gcc-15-20250719/gcc/testsuite/gcc.dg/bitint-124.c
*** gcc-15-20250712/gcc/testsuite/gcc.dg/bitint-124.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.dg/bitint-124.c	Sat Jul 19 22:32:22 2025
***************
*** 0 ****
--- 1,30 ----
+ /* PR tree-optimization/121131 */
+ /* { dg-do run { target bitint } } */
+ /* { dg-options "-O2" } */
+ 
+ #if __BITINT_MAXWIDTH__ >= 156
+ struct A { _BitInt(156) b : 135; };
+ 
+ static inline _BitInt(156)
+ foo (struct A *x)
+ {
+   return x[1].b;
+ }
+ 
+ __attribute__((noipa)) _BitInt(156)
+ bar (void)
+ {
+   struct A a[] = { 1, 1, -13055525270329736316393717310914023773847wb,
+ 		   1, 1, 1, 1, 1, 1, 1, 1, 1 };
+   return foo (&a[1]);
+ }
+ #endif
+ 
+ int
+ main ()
+ {
+ #if __BITINT_MAXWIDTH__ >= 156
+   if (bar () != -13055525270329736316393717310914023773847wb)
+     __builtin_abort ();
+ #endif
+ }
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.dg/crc-non-cst-poly-1.c gcc-15-20250719/gcc/testsuite/gcc.dg/crc-non-cst-poly-1.c
*** gcc-15-20250712/gcc/testsuite/gcc.dg/crc-non-cst-poly-1.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.dg/crc-non-cst-poly-1.c	Sat Jul 19 22:32:22 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "" } */
+ 
+ /* PR middle-end/120709 */
+ /* Make sure we don't ICE on a non-constant poly argument. */
+ 
+ 
+ typedef unsigned char uint8_t;
+ uint8_t crc8_data8(uint8_t crc, uint8_t data, uint8_t polynomial) {
+   return __builtin_rev_crc32_data8 (crc, data, polynomial); /* { dg-error "must be a constant" } */
+ }
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.dg/pr121035.c gcc-15-20250719/gcc/testsuite/gcc.dg/pr121035.c
*** gcc-15-20250712/gcc/testsuite/gcc.dg/pr121035.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.dg/pr121035.c	Sat Jul 19 22:32:23 2025
***************
*** 0 ****
--- 1,94 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fgimple" } */
+ 
+ int printf(const char *, ...);
+ int a, b, d;
+ unsigned c;
+ int __GIMPLE (ssa,startwith("pre"))
+ main ()
+ {
+   unsigned int g;
+   int f;
+   unsigned int _1;
+   unsigned int _2;
+   int _3;
+   int _4;
+   int _5;
+   unsigned int _6;
+   unsigned int _7;
+   int _10;
+   unsigned int _11;
+   _Bool _19;
+   _Bool _20;
+   _Bool _22;
+   int _25;
+ 
+   __BB(2):
+   _25 = a;
+   if (_25 != 0)
+     goto __BB11;
+   else
+     goto __BB10;
+ 
+   __BB(11):
+   goto __BB3;
+ 
+   __BB(3):
+   f_26 = __PHI (__BB12: f_18, __BB11: 0);
+   g_15 = c;
+   if (f_26 != 0)
+     goto __BB4;
+   else
+     goto __BB5;
+ 
+   __BB(4):
+   __builtin_putchar (48);
+   goto __BB5;
+ 
+   __BB(5):
+   _1 = c;
+   _2 = _1 << 1;
+   _3 = a;
+   _4 = d;
+   _5 = _3 * _4;
+   if (_5 != 0)
+     goto __BB7;
+   else
+     goto __BB6;
+ 
+   __BB(6):
+   goto __BB7;
+ 
+   __BB(7):
+   _11 = __PHI (__BB5: 0u, __BB6: 4294967295u);
+   _6 = g_15 * 4294967294u;
+   _7 = _6 | _11;
+   _20 = _3 != 0;
+   _19 = _7 != 0u;
+   _22 = _19 & _20;
+   if (_22 != _Literal (_Bool) 0)
+     goto __BB9;
+   else
+     goto __BB8;
+ 
+   __BB(8):
+   goto __BB9;
+ 
+   __BB(9):
+   _10 = __PHI (__BB7: 1, __BB8: 0);
+   b = _10;
+   f_18 = (int) _1;
+   if (_3 != 0)
+     goto __BB12;
+   else
+     goto __BB10;
+ 
+   __BB(12):
+   goto __BB3;
+ 
+   __BB(10):
+   return 0;
+ 
+ }
+ 
+ 
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.dg/torture/pr120242.c gcc-15-20250719/gcc/testsuite/gcc.dg/torture/pr120242.c
*** gcc-15-20250712/gcc/testsuite/gcc.dg/torture/pr120242.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.dg/torture/pr120242.c	Sat Jul 19 22:32:24 2025
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fsigned-char -fno-strict-aliasing -fwrapv" } */
+ 
+ char f1(char a, char b) {
+   return b == 0 ? a : b;
+ }
+ int f2(int a, int b) {
+   return b ? a : 0;
+ }
+ struct l {
+   unsigned m;
+   int n;
+ };
+ struct l ae;
+ char af = -2;
+ unsigned ah = 4;
+ int aj = 8;
+ int *test = &aj;
+ int main() {
+ ao:
+   if (f2(f1(4, af++), *test) <= 0) {
+     for (; ae.n; ae.n++)
+       ;
+     if (ah)
+       goto ao;
+   }
+   if (af != 1)
+     __builtin_abort ();
+   __builtin_exit (0);
+ }
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.dg/torture/pr120627.c gcc-15-20250719/gcc/testsuite/gcc.dg/torture/pr120627.c
*** gcc-15-20250712/gcc/testsuite/gcc.dg/torture/pr120627.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.dg/torture/pr120627.c	Sat Jul 19 22:32:24 2025
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fsigned-char -fno-strict-aliasing -fwrapv" } */
+ 
+ unsigned char sub(unsigned char t, unsigned char u) { return t - u; }
+ unsigned char mul(unsigned char t, unsigned char u) { return t * u; }
+ int x(int aa, int ab) {
+   return ab >= 32 || aa > 18446744073709551615UL >> ab ? aa : aa << ab;
+ }
+ int ag;
+ int ah = 249;
+ char ap;
+ static short ar[5][9];
+ int *as = &ag;
+ void bf(char cf) {
+   for (; ap <= 8; ap++) {
+     (ar[1][7] = mul(x(-1L, sub(cf, 247) / cf), ag <= 0)) || ar[1][4]++;
+     *as = ag;
+   }
+   return;
+ }
+ int main() {
+   bf(ah);
+   if (ar[1][7] != 255)
+     __builtin_abort ();
+   __builtin_exit (0);
+ }
+ 
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.dg/torture/pr120736.c gcc-15-20250719/gcc/testsuite/gcc.dg/torture/pr120736.c
*** gcc-15-20250712/gcc/testsuite/gcc.dg/torture/pr120736.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.dg/torture/pr120736.c	Sat Jul 19 22:32:24 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fsigned-char -fno-strict-aliasing -fwrapv" } */
+ 
+ unsigned char aa (unsigned char ab, int o) { return ab > o ? ab : 0; }
+ int p;
+ int s;
+ static unsigned char q = 255;
+ int r;
+ int *v = &s;
+ int main() {
+   p = v != 0;
+   for (; r < 8; ++r) {
+     if (s)
+       break;
+     s = aa(p * q++, 6) <= 0;
+   }
+   if (q != 1)
+     __builtin_abort ();
+   __builtin_exit (0);
+ }
+ 
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.dg/torture/pr120813.c gcc-15-20250719/gcc/testsuite/gcc.dg/torture/pr120813.c
*** gcc-15-20250712/gcc/testsuite/gcc.dg/torture/pr120813.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.dg/torture/pr120813.c	Sat Jul 19 22:32:24 2025
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-fsigned-char -fno-strict-aliasing -fwrapv" } */
+ 
+ short s (short t, short u) { return u == 0 ? 0 : t / u; }
+ int x[6];
+ int y;
+ unsigned ak = 1;
+ unsigned short al = 65527;
+ unsigned *am = &ak;
+ int main() {
+   for (int i = 0; i < 6; i++) {
+     x[i] = i;
+   }
+   for (;;) {
+     unsigned long ar = 2080554998UL;
+     char as = 4;
+     if (s(34, al++) < ar)
+       if (*am)
+         break;
+   }
+   y = x[al & 5];
+   if ((y ^ 5UL) != 4)
+     __builtin_abort ();
+   __builtin_exit (0);
+ }
+ 
+ 
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.dg/uninit-pr120924.c gcc-15-20250719/gcc/testsuite/gcc.dg/uninit-pr120924.c
*** gcc-15-20250712/gcc/testsuite/gcc.dg/uninit-pr120924.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.dg/uninit-pr120924.c	Sat Jul 19 22:32:25 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wmaybe-uninitialized" } */
+ 
+ int foo(int);
+ enum {
+   BPF_TRACE_RAW_TP,
+   BPF_MODIFY_RETURN,
+   BPF_LSM_MAC,
+   BPF_TRACE_ITER,
+   BPF_LSM_CGROUP
+ };
+ int btf_get_kernel_prefix_kind_prefix, obj_1, attach_name___trans_tmp_1;
+ char attach_name_fn_name;
+ void attach_name(int attach_type)
+ {
+   int mod_len;
+   char mod_name = attach_name_fn_name;
+   if (attach_name_fn_name)
+     mod_len = mod_name;
+   for (; obj_1;) {
+     if (mod_name && foo(mod_len))
+       continue;
+     switch (attach_type) {
+     case BPF_TRACE_RAW_TP:
+     case BPF_LSM_MAC:
+     case BPF_LSM_CGROUP:
+       btf_get_kernel_prefix_kind_prefix = 1;
+     case BPF_TRACE_ITER:
+       attach_name_fn_name = 2;
+     }
+     if (attach_name___trans_tmp_1)
+       return;
+   }
+ }
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.dg/vect/pr121049.c gcc-15-20250719/gcc/testsuite/gcc.dg/vect/pr121049.c
*** gcc-15-20250712/gcc/testsuite/gcc.dg/vect/pr121049.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.dg/vect/pr121049.c	Sat Jul 19 22:32:25 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-additional-options "--param vect-partial-vector-usage=1" } */
+ /* { dg-additional-options "-march=x86-64-v4" { target avx512f_runtime } } */
+ 
+ #include "tree-vect.h"
+ 
+ int mon_lengths[12] = { 1, 10, 100 };
+ 
+ __attribute__ ((noipa)) long
+ transtime (int mon)
+ {
+   long value = 0;
+   for (int i = 0; i < mon; ++i)
+     value += mon_lengths[i] * 2l;
+   return value;
+ }
+ 
+ int
+ main ()
+ {
+   check_vect ();
+   if (transtime (3) != 222)
+     __builtin_abort ();
+   return 0;
+ }
+ 
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.dg/vect/pr121059.c gcc-15-20250719/gcc/testsuite/gcc.dg/vect/pr121059.c
*** gcc-15-20250712/gcc/testsuite/gcc.dg/vect/pr121059.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.dg/vect/pr121059.c	Sat Jul 19 22:32:25 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-O3 --param vect-partial-vector-usage=1" } */
+ /* { dg-additional-options "-march=x86-64-v4" { target avx512f } } */
+ 
+ typedef struct {
+   long left, right, top, bottom;
+ } MngBox;
+ typedef struct {
+   MngBox object_clip[6];
+   char exists[256], frozen[];
+ } MngReadInfo;
+ MngReadInfo mng_info;
+ 
+ long ReadMNGImage_i;
+ 
+ void ReadMNGImage(int ReadMNGImage_i)
+ {
+   for (; ReadMNGImage_i < 256; ReadMNGImage_i++)
+     if (mng_info.exists[ReadMNGImage_i] && mng_info.frozen[ReadMNGImage_i])
+       mng_info.object_clip[ReadMNGImage_i].left =
+           mng_info.object_clip[ReadMNGImage_i].right =
+               mng_info.object_clip[ReadMNGImage_i].top =
+                   mng_info.object_clip[ReadMNGImage_i].bottom = 0;
+ }
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.target/aarch64/sve2/pr120999.c gcc-15-20250719/gcc/testsuite/gcc.target/aarch64/sve2/pr120999.c
*** gcc-15-20250712/gcc/testsuite/gcc.target/aarch64/sve2/pr120999.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.target/aarch64/sve2/pr120999.c	Sat Jul 19 22:32:41 2025
***************
*** 0 ****
--- 1,17 ----
+ /* PR target/120999.  */
+ /* { dg-do assemble } */
+ /* { dg-options "-O2 --save-temps" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ #define NOR(x, y)   (~((x) | (y)))
+ 
+ /*
+ ** nor_z:
+ ** 	movprfx	z0, z1
+ **	nbsl	z0.d, z0.d, z2.d, z1.d
+ ** 	ret
+ */
+ svuint64_t nor_z(svuint64_t c, svuint64_t a, svuint64_t b) { return NOR(a, b); }
+ 
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c gcc-15-20250719/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c
*** gcc-15-20250712/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c	Sat Jul 12 22:32:59 2025
--- gcc-15-20250719/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowd2ps-2.c	Sat Jul 19 22:32:43 2025
***************
*** 1,6 ****
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowd2ps
  void test_amx_avx512_cvtrowd2ps();
--- 1,6 ----
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowd2ps
  void test_amx_avx512_cvtrowd2ps();
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c gcc-15-20250719/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c
*** gcc-15-20250712/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c	Sat Jul 12 22:32:59 2025
--- gcc-15-20250719/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2bf16-2.c	Sat Jul 19 22:32:43 2025
***************
*** 1,6 ****
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowps2bf16
  void test_amx_avx512_cvtrowps2bf16();
--- 1,6 ----
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowps2bf16
  void test_amx_avx512_cvtrowps2bf16();
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c gcc-15-20250719/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c
*** gcc-15-20250712/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c	Sat Jul 12 22:32:59 2025
--- gcc-15-20250719/gcc/testsuite/gcc.target/i386/amxavx512-cvtrowps2ph-2.c	Sat Jul 19 22:32:43 2025
***************
*** 1,6 ****
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowps2ph
  void test_amx_avx512_cvtrowps2ph();
--- 1,6 ----
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_cvtrowps2ph
  void test_amx_avx512_cvtrowps2ph();
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c gcc-15-20250719/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c
*** gcc-15-20250712/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c	Sat Jul 12 22:32:59 2025
--- gcc-15-20250719/gcc/testsuite/gcc.target/i386/amxavx512-movrow-2.c	Sat Jul 19 22:32:43 2025
***************
*** 1,6 ****
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_movrow
  void test_amx_avx512_movrow();
--- 1,6 ----
  /* { dg-do run { target { ! ia32 } } } */
  /* { dg-require-effective-target amx_avx512 } */
! /* { dg-options "-O2 -march=x86-64-v3 -mamx-avx512 -mavx512fp16" } */
  #define AMX_AVX512
  #define DO_TEST test_amx_avx512_movrow
  void test_amx_avx512_movrow();
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.target/i386/pr120908.c gcc-15-20250719/gcc/testsuite/gcc.target/i386/pr120908.c
*** gcc-15-20250712/gcc/testsuite/gcc.target/i386/pr120908.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.target/i386/pr120908.c	Sat Jul 19 22:32:44 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile { target { lp64 && fpic } } } */
+ /* { dg-options "-O2 -fpic -mtls-dialect=gnu -mcmodel=large" } */
+ 
+ extern __thread long bar1;
+ long *
+ foo1 (void)
+ {
+   return &bar1;
+ }
+ 
+ static __thread long bar2;
+ long *
+ foo2 (void)
+ {
+   return &bar2;
+ }
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.target/riscv/amo/zabha-zacas-atomic-cas.c gcc-15-20250719/gcc/testsuite/gcc.target/riscv/amo/zabha-zacas-atomic-cas.c
*** gcc-15-20250712/gcc/testsuite/gcc.target/riscv/amo/zabha-zacas-atomic-cas.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.target/riscv/amo/zabha-zacas-atomic-cas.c	Sat Jul 19 22:32:45 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* PR target/120995 ICE unrecognized subword atomic cas */
+ /* { dg-options "-O" } */
+ /* { dg-add-options riscv_zacas } */
+ /* { dg-add-options riscv_zabha } */
+ 
+ _Bool b;
+ void atomic_bool_cmpxchg()
+ {
+   __sync_bool_compare_and_swap(&b, 1, 0);
+ }
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.target/riscv/pr118241-b.cc gcc-15-20250719/gcc/testsuite/gcc.target/riscv/pr118241-b.cc
*** gcc-15-20250712/gcc/testsuite/gcc.target/riscv/pr118241-b.cc	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.target/riscv/pr118241-b.cc	Sat Jul 19 22:32:45 2025
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=rv64imafdc_zba_zbb_zbs_zicbom_zicbop -mabi=lp64d" } */
+ 
+ /* Reduced from libsanitizer::asan_allocator.  */
+ 
+ enum a { c };
+ class d;
+ struct e {
+   long count;
+   void *batch[];
+ };
+ template <typename> class f {
+ public:
+   void g() {
+     if (e *b = h->i())
+       for (; b->count;)
+         if (6 < b->count)
+           __builtin_prefetch(b->batch[6]);
+   }
+   d *h;
+ };
+ class d {
+ public:
+   e *i();
+ };
+ struct j {
+   f<int> k;
+   j(a);
+   void l() { k.g(); }
+ } a(c);
+ void m() { a.l(); }
+ 
+ /* { dg-final { scan-assembler-times "prefetch.r\t0\\(\[a-x0-9\]+\\)" 1 } } */
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.target/riscv/pr118241.c gcc-15-20250719/gcc/testsuite/gcc.target/riscv/pr118241.c
*** gcc-15-20250712/gcc/testsuite/gcc.target/riscv/pr118241.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.target/riscv/pr118241.c	Sat Jul 19 22:32:45 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zicbop" { target { rv64 } } } */
+ /* { dg-options "-march=rv32gc_zicbop" { target { rv32 } } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ void test1() { __builtin_prefetch((int *)2047); }
+ void test2() { __builtin_prefetch((int *)1024); }
+ void test3(char *x) { __builtin_prefetch(&x); }
+ void test4(char *x) { __builtin_prefetch(&x[2]); }
+ void test5(char *x) { __builtin_prefetch(&x[1024]); }
+ 
+ /* So we expect test1, test3 and test4 to be a prefetch
+    with zero offset.  test2 and test5 will have a 1k offset.  */
+ /* { dg-final { scan-assembler-times "prefetch.r\t0\\(\[a-x0-9\]+\\)" 3 } } */
+ /* { dg-final { scan-assembler-times "prefetch.r\t1024" 2 } } */
+ 
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c gcc-15-20250719/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c
*** gcc-15-20250712/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c	Sat Jul 19 22:32:45 2025
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target rvv_zvl256b_ok } */
+ /* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -mrvv-vector-bits=zvl -O2" } */
+ 
+ unsigned char a = 5;
+ long long c[18];
+ 
+ static void d ()
+ {
+   for (short i = 0; i < 60; i += 65413)
+     for (char j = 0; j < 18; j++)
+       {
+ 	for (char k = 0; k < 18; k++)
+ 	  a *= 143;
+ 	for (char k = 0; k < 6; k++)
+ 	  for (char l = 0; l < 18; l++)
+ 	    c[l] = 0;
+       }
+ }
+ 
+ int main ()
+ {
+   d ();
+   if (a + c[0] != 69)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gfortran.dg/asan/finalize_1.f90 gcc-15-20250719/gcc/testsuite/gfortran.dg/asan/finalize_1.f90
*** gcc-15-20250712/gcc/testsuite/gfortran.dg/asan/finalize_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gfortran.dg/asan/finalize_1.f90	Sat Jul 19 22:32:48 2025
***************
*** 0 ****
--- 1,67 ----
+ !{ dg-do run }
+ 
+ ! PR fortran/120637
+ 
+ ! Contributed by Antony Lewis  <antony@cosmologist.info>
+ ! The unused module is needed to trigger the issue of not freeing the
+ ! memory of second module.
+ 
+     module MiscUtils
+     implicit none
+ 
+     contains
+         
+     logical function isFloat0(R)
+     class(*), intent(in) :: R
+ 
+     select type(R)
+     type is (real)
+         isFloat0 = .true.
+     end select
+     end function isFloat0
+ 
+     end module MiscUtils
+     
+     module results3
+     implicit none
+     public
+ 
+     Type ClTransferData2
+       real, dimension(:,:,:), allocatable :: Delta_p_l_k
+     end type ClTransferData2
+ 
+     type TCLdata2
+        Type(ClTransferData2) :: CTransScal, CTransTens, CTransVec
+     end type TCLdata2 
+ 
+     type :: CAMBdata2
+         Type(TClData2) :: CLdata2
+     end type  
+ 
+     end module results3
+ 
+ program driver
+    use results3
+    integer i
+    do i=1, 2
+    call test()   
+    end do
+ 
+    contains
+ 
+    subroutine test
+        implicit none
+        class(CAMBdata2), pointer :: Data
+ 
+        allocate(CAMBdata2::Data)
+ 
+        allocate(Data%ClData2%CTransScal%Delta_p_l_k(3, 1000, 1000)) 
+        allocate(Data%ClData2%CTransVec%Delta_p_l_k(3, 1000, 1000))
+        deallocate(Data)
+ 
+    end subroutine test
+ 
+  end program driver
+ 
+ !{ dg-final { cleanup-modules "miscutils results3" } }
+ 
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gfortran.dg/associate_75.f90 gcc-15-20250719/gcc/testsuite/gfortran.dg/associate_75.f90
*** gcc-15-20250712/gcc/testsuite/gfortran.dg/associate_75.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gfortran.dg/associate_75.f90	Sat Jul 19 22:32:49 2025
***************
*** 0 ****
--- 1,50 ----
+ ! { dg-do run }
+ !
+ ! Test fix for PR121060.
+ !
+ ! Contributed by Damian Rouson  <damian@archaeologic.codes>
+ !
+ module subdomain_m
+   implicit none
+ 
+   type subdomain_t 
+     real :: s_ = 99.
+   contains
+     generic :: operator(.laplacian.) => laplacian
+     procedure laplacian
+   end type
+ 
+ contains
+ 
+   function laplacian(rhs)
+     class(subdomain_t), intent(in) :: rhs
+     type(subdomain_t) laplacian
+     laplacian%s_ = rhs%s_ + 42
+   end function
+ 
+ end module
+ 
+   use subdomain_m
+   implicit none
+ 
+   type operands_t
+     real :: s_
+   end type
+ 
+   type(subdomain_t) phi
+   type(operands_t) operands
+ 
+   associate(laplacian_phi => .laplacian. phi) ! ICE because specific not found.
+     operands = approximates(laplacian_phi%s_)
+   end associate
+ 
+   if (int (operands%s_) /= 42) stop 1
+ contains
+ 
+   function approximates(actual)
+     real actual 
+     type(operands_t) approximates
+     approximates%s_ = actual - 99
+   end function
+ 
+ end
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gfortran.dg/gomp/pr104428.f90 gcc-15-20250719/gcc/testsuite/gfortran.dg/gomp/pr104428.f90
*** gcc-15-20250712/gcc/testsuite/gfortran.dg/gomp/pr104428.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gfortran.dg/gomp/pr104428.f90	Sat Jul 19 22:32:50 2025
***************
*** 0 ****
--- 1,15 ----
+ ! { dg-do compile }
+ 
+ program p
+   interface
+     subroutine x
+     end subroutine x
+   end interface
+ contains
+   subroutine foo
+     !$omp declare variant(x) match(construct={do})
+   end
+   subroutine bar
+     !$omp declare variant(y) match(construct={do}) ! { dg-error "Cannot find symbol 'y'" }
+   end
+ end
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/iso/fail/CHAR.mod gcc-15-20250719/gcc/testsuite/gm2/iso/fail/CHAR.mod
*** gcc-15-20250712/gcc/testsuite/gm2/iso/fail/CHAR.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/iso/fail/CHAR.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,7 ----
+ MODULE CHAR ;
+ 
+ IMPORT CHAR ;
+ 
+ BEGIN
+    CHAR.Write ("h")
+ END CHAR.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/iso/fail/badarray3.mod gcc-15-20250719/gcc/testsuite/gm2/iso/fail/badarray3.mod
*** gcc-15-20250712/gcc/testsuite/gm2/iso/fail/badarray3.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/iso/fail/badarray3.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,7 ----
+ MODULE badarray3 ;
+ 
+ VAR
+    x: ARRAY [1..5] OF INTEGER ;
+ BEGIN
+    x[1] := 'c';
+ END badarray3.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/iso/fail/badreturn.mod gcc-15-20250719/gcc/testsuite/gm2/iso/fail/badreturn.mod
*** gcc-15-20250712/gcc/testsuite/gm2/iso/fail/badreturn.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/iso/fail/badreturn.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,5 ----
+ MODULE badreturn ;
+ 
+ BEGIN
+    RETURN 0
+ END badreturn.
\ No newline at end of file
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/iso/fail/badreturn2.mod gcc-15-20250719/gcc/testsuite/gm2/iso/fail/badreturn2.mod
*** gcc-15-20250712/gcc/testsuite/gm2/iso/fail/badreturn2.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/iso/fail/badreturn2.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,12 ----
+ MODULE badreturn2 ;
+ 
+ 
+ PROCEDURE foo ;
+ BEGIN
+    RETURN 0
+ END foo ;
+ 
+ 
+ BEGIN
+    foo
+ END badreturn2.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/iso/pass/modulereturn.mod gcc-15-20250719/gcc/testsuite/gm2/iso/pass/modulereturn.mod
*** gcc-15-20250712/gcc/testsuite/gm2/iso/pass/modulereturn.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/iso/pass/modulereturn.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,5 ----
+ MODULE modulereturn ;
+ 
+ BEGIN
+    RETURN
+ END modulereturn.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/iso/pass/modulereturn2.mod gcc-15-20250719/gcc/testsuite/gm2/iso/pass/modulereturn2.mod
*** gcc-15-20250712/gcc/testsuite/gm2/iso/pass/modulereturn2.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/iso/pass/modulereturn2.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,10 ----
+ MODULE modulereturn2 ;
+ 
+ 
+ BEGIN
+    RETURN
+ EXCEPT
+    RETURN
+ FINALLY
+    RETURN
+ END modulereturn2.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/iso/run/pass/CHAR.mod gcc-15-20250719/gcc/testsuite/gm2/iso/run/pass/CHAR.mod
*** gcc-15-20250712/gcc/testsuite/gm2/iso/run/pass/CHAR.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/iso/run/pass/CHAR.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,7 ----
+ MODULE CHAR ;
+ 
+ FROM libc IMPORT printf ;
+ 
+ BEGIN
+    printf ("hello world\n")
+ END CHAR.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/iso/run/pass/importself.mod gcc-15-20250719/gcc/testsuite/gm2/iso/run/pass/importself.mod
*** gcc-15-20250712/gcc/testsuite/gm2/iso/run/pass/importself.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/iso/run/pass/importself.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,14 ----
+ MODULE importself ;
+ 
+ IMPORT importself ;
+ 
+ 
+ PROCEDURE foo ;
+ BEGIN
+ 
+ END foo ;
+ 
+ BEGIN
+    foo ;
+    importself.foo
+ END importself.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/isolib/run/pass/testdelete2.mod gcc-15-20250719/gcc/testsuite/gm2/isolib/run/pass/testdelete2.mod
*** gcc-15-20250712/gcc/testsuite/gm2/isolib/run/pass/testdelete2.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/isolib/run/pass/testdelete2.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,107 ----
+ MODULE testdelete2 ;
+ 
+ (* A test module to test file creation and deletion using ISO
+    libraries.  *)
+ 
+ 
+ IMPORT DynamicStrings, StringFileSysOp,
+        FileSysOp, SeqFile, TextIO, Strings,
+        IOChanUtils ;
+ 
+ FROM libc IMPORT printf, exit ;
+ FROM FormatStrings IMPORT Sprintf1 ;
+ 
+ 
+ CONST
+    MaxFile = 10 ;
+ 
+ VAR
+    files: ARRAY [0..MaxFile] OF SeqFile.ChanId ;
+ 
+ 
+ PROCEDURE Assert (condition: BOOLEAN; line: CARDINAL) ;
+ BEGIN
+    IF NOT condition
+    THEN
+       printf ("%s:%d: assert failed\n", __FILE__, line) ;
+       exit (1)
+    END
+ END Assert ;
+ 
+ 
+ (*
+    CreateFiles - create MaxFile files saving the file handle
+                  into files.
+ *)
+ 
+ PROCEDURE CreateFiles ;
+ VAR
+    i   : CARDINAL ;
+    name: ARRAY [0..10] OF CHAR ;
+    ch  : CHAR ;
+    res : SeqFile.OpenResults ;
+ BEGIN
+    FOR i := 1 TO HIGH (files) DO
+       Strings.Assign ('file', name) ;
+       ch := CHR (ORD ('0')+i-1) ;
+       name[4] := ch ;
+       name[5] := 0C ;
+       SeqFile.OpenWrite (files[i], name,
+                          SeqFile.text+SeqFile.write, res) ;
+       TextIO.WriteString (files[i], "some text inside file ") ;
+       TextIO.WriteLn (files[i]) ;
+       SeqFile.Close (files[i])
+    END
+ END CreateFiles ;
+ 
+ 
+ (*
+    DeleteFiles - delete every file in files.
+ *)
+ 
+ PROCEDURE DeleteFiles ;
+ VAR
+    i   : CARDINAL ;
+    name: ARRAY [0..10] OF CHAR ;
+    s   : DynamicStrings.String ;
+    ch  : CHAR ;
+    res : SeqFile.OpenResults ;
+ BEGIN
+    (* Open the files first.  *)
+    FOR i := 1 TO HIGH (files) DO
+       Strings.Assign ('file', name) ;
+       ch := CHR (ORD ('0')+i-1) ;
+       name[4] := ch ;
+       name[5] := 0C ;
+       SeqFile.OpenRead (files[i], name, SeqFile.text, res) ;
+       Assert (FileSysOp.Exists (name), __LINE__) ;
+       Assert (FileSysOp.IsFile (name), __LINE__)
+    END ;
+    (* Now delete them.  *)
+    FOR i := 1 TO HIGH (files) DO
+       s := IOChanUtils.GetFileName (files[i]) ;
+       Assert (StringFileSysOp.Exists (s), __LINE__) ;
+       Assert (StringFileSysOp.IsFile (s), __LINE__) ;
+       Assert (StringFileSysOp.Unlink (s), __LINE__) ;
+       Assert (NOT StringFileSysOp.Exists (s), __LINE__) ;
+       SeqFile.Close (files[i]) ;
+       s := DynamicStrings.KillString (s)
+    END
+ END DeleteFiles ;
+ 
+ 
+ (*
+    Init -
+ *)
+ 
+ PROCEDURE Init ;
+ BEGIN
+    CreateFiles ;
+    DeleteFiles ;
+    printf ("all tests passed\n")
+ END Init ;
+ 
+ 
+ BEGIN
+    Init
+ END testdelete2.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/fail/badmodvar.mod gcc-15-20250719/gcc/testsuite/gm2/pim/fail/badmodvar.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/fail/badmodvar.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/fail/badmodvar.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,7 ----
+ MODULE badmodvar ;
+ 
+ VAR
+    x: y ;
+ BEGIN
+ 
+ END badmodvar.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/fail/cyclictypes.mod gcc-15-20250719/gcc/testsuite/gm2/pim/fail/cyclictypes.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/fail/cyclictypes.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/fail/cyclictypes.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,13 ----
+ MODULE cyclictypes ;
+ 
+ TYPE
+    A = B;
+    B = A;
+ 
+ PROCEDURE foo ;
+ VAR
+    bar: A ;
+ END foo ;
+ 
+ 
+ END cyclictypes.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/fail/cyclictypes2.mod gcc-15-20250719/gcc/testsuite/gm2/pim/fail/cyclictypes2.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/fail/cyclictypes2.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/fail/cyclictypes2.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,9 ----
+ MODULE cyclictypes2 ;
+ 
+ TYPE
+    A = B;
+    B = A;
+ 
+ VAR
+    bar: A ;
+ END cyclictypes2.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/fail/cyclictypes4.mod gcc-15-20250719/gcc/testsuite/gm2/pim/fail/cyclictypes4.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/fail/cyclictypes4.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/fail/cyclictypes4.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,13 ----
+ MODULE cyclictypes4 ;
+ 
+ TYPE
+    A = B ;
+    B = C ;
+    C = D ;
+    D = A ;
+ 
+ VAR
+    v: A ;
+ BEGIN
+ 
+ END cyclictypes4.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/fail/testcharint.mod gcc-15-20250719/gcc/testsuite/gm2/pim/fail/testcharint.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/fail/testcharint.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/fail/testcharint.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,8 ----
+ MODULE testcharint ;  (*!m2iso+gm2*)
+ 
+ VAR
+    ch: CHAR ;
+    i : INTEGER ;
+ BEGIN
+    ch := i
+ END testcharint.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/fail/testindrx.mod gcc-15-20250719/gcc/testsuite/gm2/pim/fail/testindrx.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/fail/testindrx.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/fail/testindrx.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,8 ----
+ MODULE testindrx ;  (*!m2iso+gm2*)
+ 
+ VAR
+    x: ARRAY [1..5] OF INTEGER ;
+    ch: CHAR ;
+ BEGIN
+    ch := x[1]
+ END testindrx.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/pass/ReturnType.mod gcc-15-20250719/gcc/testsuite/gm2/pim/pass/ReturnType.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/pass/ReturnType.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/pass/ReturnType.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,17 ----
+ MODULE ReturnType ;
+ 
+ TYPE
+    bar = POINTER TO CARDINAL ;
+ 
+ 
+ PROCEDURE foo (VAR value: bar) : bar ;
+ BEGIN
+    RETURN value
+ END foo ;
+ 
+ VAR
+    b: bar ;
+ BEGIN
+    b := NIL ;
+    b := foo (b)
+ END ReturnType.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/pass/ReturnType2.mod gcc-15-20250719/gcc/testsuite/gm2/pim/pass/ReturnType2.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/pass/ReturnType2.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/pass/ReturnType2.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,19 ----
+ MODULE ReturnType2 ;
+ 
+ TYPE
+    bar = POINTER TO RECORD
+                        field: CARDINAL ;
+                     END ;
+ 
+ 
+ PROCEDURE foo (VAR value: bar) : bar ;
+ BEGIN
+    RETURN value
+ END foo ;
+ 
+ VAR
+    b: bar ;
+ BEGIN
+    b := NIL ;
+    b := foo (b)
+ END ReturnType2.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/pass/forarray.mod gcc-15-20250719/gcc/testsuite/gm2/pim/pass/forarray.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/pass/forarray.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/pass/forarray.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,21 ----
+ MODULE forarray ;
+ 
+ 
+ VAR
+    array: ARRAY [0..10] OF CARDINAL ;
+ 
+ 
+ PROCEDURE Init ;
+ VAR
+    i, n: CARDINAL ;
+ BEGIN
+    array[0] := 10 ;
+    n := 0 ;
+    FOR i := 1 TO array[n] DO
+    END
+ END Init ;
+ 
+ 
+ BEGIN
+    Init
+ END forarray.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/pass/testxindr.mod gcc-15-20250719/gcc/testsuite/gm2/pim/pass/testxindr.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/pass/testxindr.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/pass/testxindr.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,17 ----
+ MODULE testxindr ;  (*!m2iso+gm2*)
+ 
+ CONST
+    NulName = 0 ;
+ 
+ TYPE
+    Name = CARDINAL ;
+ 
+    ptr = POINTER TO RECORD
+                        n: Name ;
+                     END ;
+ 
+ VAR
+    p: ptr ;
+ BEGIN
+    p^.n := NulName
+ END testxindr.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/pass/testxindr2.mod gcc-15-20250719/gcc/testsuite/gm2/pim/pass/testxindr2.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/pass/testxindr2.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/pass/testxindr2.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,17 ----
+ MODULE testxindr2 ;  (*!m2iso+gm2*)
+ 
+ CONST
+    NulName = 0 ;
+ TYPE
+    Name = CARDINAL ;
+ 
+ PROCEDURE set (VAR n: Name) ;
+ BEGIN
+    n := NulName
+ END set ;
+ 
+ VAR
+    n: Name ;
+ BEGIN
+    set (n)
+ END testxindr2.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pim/pass/testxindr3.mod gcc-15-20250719/gcc/testsuite/gm2/pim/pass/testxindr3.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pim/pass/testxindr3.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pim/pass/testxindr3.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,15 ----
+ MODULE testxindr3 ;  (*!m2iso+gm2*)
+ 
+ CONST
+    NulName = 0 ;
+ 
+ PROCEDURE set (VAR n: CARDINAL) ;
+ BEGIN
+    n := NulName
+ END set ;
+ 
+ VAR
+    n: CARDINAL ;
+ BEGIN
+    set (n)
+ END testxindr3.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pimlib/logitech/run/pass/testdelete2.mod gcc-15-20250719/gcc/testsuite/gm2/pimlib/logitech/run/pass/testdelete2.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pimlib/logitech/run/pass/testdelete2.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pimlib/logitech/run/pass/testdelete2.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,104 ----
+ MODULE testdelete2 ;
+ 
+ (* A test module to test file creation and deletion using log
+    libraries.  *)
+ 
+ 
+ IMPORT FIO, SFIO, DynamicStrings, StringFileSysOp,
+        FileSysOp, FileSystem, StrLib ;
+ 
+ FROM libc IMPORT printf, exit ;
+ FROM FormatStrings IMPORT Sprintf1 ;
+ 
+ 
+ CONST
+    MaxFile = 10 ;
+ 
+ VAR
+    files: ARRAY [0..MaxFile] OF FileSystem.File ;
+ 
+ 
+ PROCEDURE Assert (condition: BOOLEAN; line: CARDINAL) ;
+ BEGIN
+    IF NOT condition
+    THEN
+       printf ("%s:%d: assert failed\n", __FILE__, line) ;
+       exit (1)
+    END
+ END Assert ;
+ 
+ 
+ (*
+    CreateFiles - create MaxFile files saving the file handle
+                  into files.
+ *)
+ 
+ PROCEDURE CreateFiles ;
+ VAR
+    i   : CARDINAL ;
+    name: ARRAY [0..10] OF CHAR ;
+    ch  : CHAR ;
+ BEGIN
+    FOR i := 1 TO HIGH (files) DO
+       StrLib.StrCopy ('file', name) ;
+       ch := CHR (ORD ('0')+i-1) ;
+       name[4] := ch ;
+       name[5] := 0C ;
+       FileSystem.Lookup (files[i], name, TRUE) ;
+       FileSystem.WriteString (files[i], "some text inside file ") ;
+       FileSystem.WriteChar (files[i], ch) ;
+       FileSystem.WriteString (files[i], "\n") ;
+       FileSystem.Close (files[i])
+    END
+ END CreateFiles ;
+ 
+ 
+ (*
+    DeleteFiles - delete every file in files.
+ *)
+ 
+ PROCEDURE DeleteFiles ;
+ VAR
+    i   : CARDINAL ;
+    name: ARRAY [0..10] OF CHAR ;
+    s   : DynamicStrings.String ;
+    ch  : CHAR ;
+ BEGIN
+    (* Open the files first.  *)
+    FOR i := 1 TO HIGH (files) DO
+       StrLib.StrCopy ('file', name) ;
+       ch := CHR (ORD ('0')+i-1) ;
+       name[4] := ch ;
+       name[5] := 0C ;
+       FileSystem.Lookup (files[i], name, FALSE) ;
+       Assert (FileSysOp.Exists (name), __LINE__) ;
+       Assert (FileSysOp.IsFile (name), __LINE__)
+    END ;
+    (* Now delete them.  *)
+    FOR i := 1 TO HIGH (files) DO
+       s := FileSystem.GetFileName (files[i]) ;
+       Assert (StringFileSysOp.Exists (s), __LINE__) ;
+       Assert (StringFileSysOp.IsFile (s), __LINE__) ;
+       Assert (StringFileSysOp.Unlink (s), __LINE__) ;
+       Assert (NOT StringFileSysOp.Exists (s), __LINE__) ;
+       FileSystem.Close (files[i]) ;
+       s := DynamicStrings.KillString (s)
+    END
+ END DeleteFiles ;
+ 
+ 
+ (*
+    Init -
+ *)
+ 
+ PROCEDURE Init ;
+ BEGIN
+    CreateFiles ;
+    DeleteFiles ;
+    printf ("all tests passed\n")
+ END Init ;
+ 
+ 
+ BEGIN
+    Init
+ END testdelete2.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pimlib/logitech/run/pass/teststrings.mod gcc-15-20250719/gcc/testsuite/gm2/pimlib/logitech/run/pass/teststrings.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pimlib/logitech/run/pass/teststrings.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pimlib/logitech/run/pass/teststrings.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,16 ----
+ MODULE teststrings ;
+ 
+ IMPORT InOut,Strings;
+ 
+ VAR
+    content : ARRAY[1..256] OF CHAR;
+    position: CARDINAL;
+ 
+ (* the content is just random text.  *)
+ 
+ BEGIN
+    content := "erreur: In program module « essai3 »: attempting to pass (1) parameters to procedure";
+    InOut.WriteString(content);
+    InOut.WriteLn;
+    position := Strings.Pos ("IMPORT", content);
+ END teststrings .
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pimlib/run/pass/testdelete.mod gcc-15-20250719/gcc/testsuite/gm2/pimlib/run/pass/testdelete.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pimlib/run/pass/testdelete.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pimlib/run/pass/testdelete.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,97 ----
+ MODULE testdelete ;
+ 
+ (* A test module to test file creation and deletion using base
+    PIM libraries.  *)
+ 
+ 
+ IMPORT FIO, SFIO, DynamicStrings, StringFileSysOp ;
+ FROM libc IMPORT printf, exit ;
+ FROM FormatStrings IMPORT Sprintf1 ;
+ 
+ 
+ CONST
+    MaxFile = 10 ;
+ 
+ VAR
+    files: ARRAY [0..MaxFile] OF FIO.File ;
+ 
+ 
+ PROCEDURE Assert (condition: BOOLEAN; line: CARDINAL) ;
+ BEGIN
+    IF NOT condition
+    THEN
+       printf ("%s:%d: assert failed\n", __FILE__, line) ;
+       exit (1)
+    END
+ END Assert ;
+ 
+ 
+ (*
+    CreateFiles - create MaxFile files saving the file handle
+                  into files.
+ *)
+ 
+ PROCEDURE CreateFiles ;
+ VAR
+    i: CARDINAL ;
+    s: DynamicStrings.String ;
+ BEGIN
+    FOR i := 1 TO HIGH (files) DO
+       s := DynamicStrings.InitString ("file%03d") ;
+       s := Sprintf1 (s, i) ;
+       files[i] := SFIO.OpenToWrite (s) ;
+       s := DynamicStrings.KillString (s) ;
+       s := DynamicStrings.InitString ("some text inside file %d\n") ;
+       s := Sprintf1 (s, i) ;
+       s := DynamicStrings.KillString (SFIO.WriteS (files[i], s)) ;
+       FIO.Close (files[i])
+    END
+ END CreateFiles ;
+ 
+ 
+ (*
+    DeleteFiles - delete every file in files.
+ *)
+ 
+ PROCEDURE DeleteFiles ;
+ VAR
+    i: CARDINAL ;
+    s: DynamicStrings.String ;
+ BEGIN
+    (* Open the files first.  *)
+    FOR i := 1 TO HIGH (files) DO
+       s := DynamicStrings.InitString ("file%03d") ;
+       s := Sprintf1 (s, i) ;
+       files[i] := SFIO.OpenToRead (s) ;
+       Assert (StringFileSysOp.Exists (s), __LINE__) ;
+       Assert (StringFileSysOp.IsFile (s), __LINE__) ;
+       s := DynamicStrings.KillString (s)
+    END ;
+    (* Now delete them.  *)
+    FOR i := 1 TO HIGH (files) DO
+       s := SFIO.GetFileName (files[i]) ;
+       Assert (StringFileSysOp.Exists (s), __LINE__) ;
+       Assert (StringFileSysOp.IsFile (s), __LINE__) ;
+       Assert (StringFileSysOp.Unlink (s), __LINE__) ;
+       Assert (NOT StringFileSysOp.Exists (s), __LINE__) ;
+       FIO.Close (files[i]) ;
+       s := DynamicStrings.KillString (s)
+    END
+ END DeleteFiles ;
+ 
+ 
+ (*
+    Init -
+ *)
+ 
+ PROCEDURE Init ;
+ BEGIN
+    CreateFiles ;
+    DeleteFiles ;
+    printf ("all tests passed\n")
+ END Init ;
+ 
+ 
+ BEGIN
+    Init
+ END testdelete.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pimlib/run/pass/testwrite.mod gcc-15-20250719/gcc/testsuite/gm2/pimlib/run/pass/testwrite.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pimlib/run/pass/testwrite.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pimlib/run/pass/testwrite.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,8 ----
+ MODULE testwrite ;
+ 
+ IMPORT ARRAYOFCHAR ;
+ FROM FIO IMPORT StdOut ;
+ 
+ BEGIN
+    ARRAYOFCHAR.Write (StdOut, "hello world") ; ARRAYOFCHAR.WriteLn (StdOut)
+ END testwrite.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gm2/pimlib/run/pass/testwritechar.mod gcc-15-20250719/gcc/testsuite/gm2/pimlib/run/pass/testwritechar.mod
*** gcc-15-20250712/gcc/testsuite/gm2/pimlib/run/pass/testwritechar.mod	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gm2/pimlib/run/pass/testwritechar.mod	Sat Jul 19 22:32:52 2025
***************
*** 0 ****
--- 1,13 ----
+ MODULE testwritechar ;
+ 
+ IMPORT CHAR ;
+ FROM FIO IMPORT StdOut ;
+ 
+ BEGIN
+    CHAR.Write (StdOut, 'h') ;
+    CHAR.Write (StdOut, 'e') ;
+    CHAR.Write (StdOut, 'l') ;
+    CHAR.Write (StdOut, 'l') ;
+    CHAR.Write (StdOut, 'o') ;
+    CHAR.WriteLn (StdOut)
+ END testwritechar.
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gnat.dg/deref4.adb gcc-15-20250719/gcc/testsuite/gnat.dg/deref4.adb
*** gcc-15-20250712/gcc/testsuite/gnat.dg/deref4.adb	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gnat.dg/deref4.adb	Sat Jul 19 22:32:53 2025
***************
*** 0 ****
--- 1,9 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnatX" }
+ 
+ with Deref4_Pkg; use Deref4_Pkg;
+ 
+ procedure Deref4 is
+ begin
+   Obj.Proc (null);
+ end;
diff -Nrcpad gcc-15-20250712/gcc/testsuite/gnat.dg/deref4_pkg.ads gcc-15-20250719/gcc/testsuite/gnat.dg/deref4_pkg.ads
*** gcc-15-20250712/gcc/testsuite/gnat.dg/deref4_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/gcc/testsuite/gnat.dg/deref4_pkg.ads	Sat Jul 19 22:32:53 2025
***************
*** 0 ****
--- 1,8 ----
+ package Deref4_Pkg is
+ 
+   type A is tagged null record;
+   type A_Ptr is access A;
+   procedure Proc (This : in out A'Class; Some_Parameter : A_Ptr) is null;
+   Obj : A_Ptr;
+ 
+ end Deref4_Pkg;
diff -Nrcpad gcc-15-20250712/gcc/testsuite/rust/compile/nr2/compile.exp gcc-15-20250719/gcc/testsuite/rust/compile/nr2/compile.exp
*** gcc-15-20250712/gcc/testsuite/rust/compile/nr2/compile.exp	Sat Jul 12 22:33:15 2025
--- gcc-15-20250719/gcc/testsuite/rust/compile/nr2/compile.exp	Sat Jul 19 22:32:55 2025
***************
*** 19,24 ****
--- 19,33 ----
  # Load support procs.
  load_lib rust-dg.exp
  
+ # These tests don't run runtest_file_p consistently if it
+ # doesn't return the same values, so disable parallelization
+ # of this *.exp file.  The first parallel runtest to reach
+ # this will run all the tests serially.
+ if ![gcc_parallel_test_run_p compile] {
+     return
+ }
+ gcc_parallel_test_enable 0
+ 
  # Initialize `dg'.
  dg-init
  
*************** namespace eval rust-nr2-ns {
*** 136,138 ****
--- 145,149 ----
  
  # All done.
  dg-finish
+ 
+ gcc_parallel_test_enable 1
diff -Nrcpad gcc-15-20250712/gcc/tree-ssa-pre.cc gcc-15-20250719/gcc/tree-ssa-pre.cc
*** gcc-15-20250712/gcc/tree-ssa-pre.cc	Sat Jul 12 22:33:15 2025
--- gcc-15-20250719/gcc/tree-ssa-pre.cc	Sat Jul 19 22:32:55 2025
*************** find_or_generate_expression (basic_block
*** 2773,2788 ****
    bitmap exprset = value_expressions[lookfor];
    bitmap_iterator bi;
    unsigned int i;
!   EXECUTE_IF_SET_IN_BITMAP (exprset, 0, i, bi)
!     {
!       pre_expr temp = expression_for_id (i);
!       /* We cannot insert random REFERENCE expressions at arbitrary
! 	 places.  We can insert NARYs which eventually re-materializes
! 	 its operand values.  */
!       if (temp->kind == NARY)
! 	return create_expression_by_pieces (block, temp, stmts,
! 					    TREE_TYPE (op));
!     }
  
    /* Defer.  */
    return NULL_TREE;
--- 2773,2789 ----
    bitmap exprset = value_expressions[lookfor];
    bitmap_iterator bi;
    unsigned int i;
!   if (exprset)
!     EXECUTE_IF_SET_IN_BITMAP (exprset, 0, i, bi)
!       {
! 	pre_expr temp = expression_for_id (i);
! 	/* We cannot insert random REFERENCE expressions at arbitrary
! 	   places.  We can insert NARYs which eventually re-materializes
! 	   its operand values.  */
! 	if (temp->kind == NARY)
! 	  return create_expression_by_pieces (block, temp, stmts,
! 					      TREE_TYPE (op));
!       }
  
    /* Defer.  */
    return NULL_TREE;
diff -Nrcpad gcc-15-20250712/gcc/tree-vect-stmts.cc gcc-15-20250719/gcc/tree-vect-stmts.cc
*** gcc-15-20250712/gcc/tree-vect-stmts.cc	Sat Jul 12 22:33:15 2025
--- gcc-15-20250719/gcc/tree-vect-stmts.cc	Sat Jul 19 22:32:55 2025
*************** vectorizable_conversion (vec_info *vinfo
*** 5920,5925 ****
--- 5920,5939 ----
        gcc_unreachable ();
      }
  
+   if (modifier == WIDEN
+       && loop_vinfo
+       && LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo)
+       && (code1 == VEC_WIDEN_MULT_EVEN_EXPR
+ 	  || widening_evenodd_fn_p (code1)))
+     {
+       if (dump_enabled_p ())
+ 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ 			 "can't use a fully-masked loop because"
+ 			 " widening operation on even/odd elements"
+ 			 " mixes up lanes.\n");
+       LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false;
+     }
+ 
    if (!vec_stmt)		/* transformation not required.  */
      {
        if (slp_node
*************** vectorizable_operation (vec_info *vinfo,
*** 6855,6861 ****
    poly_uint64 nunits_out;
    tree vectype_out;
    unsigned int ncopies;
!   int vec_num;
    int i;
    vec<tree> vec_oprnds0 = vNULL;
    vec<tree> vec_oprnds1 = vNULL;
--- 6869,6875 ----
    poly_uint64 nunits_out;
    tree vectype_out;
    unsigned int ncopies;
!   unsigned vec_num;
    int i;
    vec<tree> vec_oprnds0 = vNULL;
    vec<tree> vec_oprnds1 = vNULL;
*************** vectorizable_operation (vec_info *vinfo,
*** 7426,7433 ****
  	      && code == BIT_AND_EXPR
  	      && VECTOR_BOOLEAN_TYPE_P (vectype))
  	    {
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op0,
! 								 ncopies}))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num * ncopies, vectype, i);
--- 7440,7447 ----
  	      && code == BIT_AND_EXPR
  	      && VECTOR_BOOLEAN_TYPE_P (vectype))
  	    {
! 	      if (loop_vinfo->scalar_cond_masked_set.contains
! 						   ({ op0, vec_num * ncopies}))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num * ncopies, vectype, i);
*************** vectorizable_operation (vec_info *vinfo,
*** 7436,7443 ****
  					   vop0, gsi);
  		}
  
! 	      if (loop_vinfo->scalar_cond_masked_set.contains ({ op1,
! 								 ncopies }))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num * ncopies, vectype, i);
--- 7450,7457 ----
  					   vop0, gsi);
  		}
  
! 	      if (loop_vinfo->scalar_cond_masked_set.contains
! 						  ({ op1, vec_num * ncopies }))
  		{
  		  mask = vect_get_loop_mask (loop_vinfo, gsi, masks,
  					     vec_num * ncopies, vectype, i);
diff -Nrcpad gcc-15-20250712/libgm2/ChangeLog gcc-15-20250719/libgm2/ChangeLog
*** gcc-15-20250712/libgm2/ChangeLog	Sat Jul 12 22:33:31 2025
--- gcc-15-20250719/libgm2/ChangeLog	Sat Jul 19 22:34:00 2025
***************
*** 1,3 ****
--- 1,28 ----
+ 2025-07-18  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-29  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/117203
+ 	* libm2iso/Makefile.am (M2DEFS): Add IOChanUtils.def.
+ 	(M2MODS): Add IOChanUtils.mod.
+ 	* libm2iso/Makefile.in: Regenerate.
+ 
+ 2025-07-17  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-06-07  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/119650
+ 	PR modula2/117203
+ 	* libm2pim/Makefile.am (M2MODS): Add ARRAYOFCHAR,
+ 	CHAR.mod, StringFileSysOp.mod and String.mod.
+ 	(M2DEFS): Add ARRAYOFCHAR, CHAR.mod,
+ 	StringFileSysOp.mod and String.mod.
+ 	(libm2pim_la_SOURCES): Add CFileSysOp.c.
+ 	* libm2pim/Makefile.in: Regenerate.
+ 	* libm2pim/CFileSysOp.cc: New file.
+ 
  2025-05-13  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250712/libgm2/libm2iso/Makefile.am gcc-15-20250719/libgm2/libm2iso/Makefile.am
*** gcc-15-20250712/libgm2/libm2iso/Makefile.am	Sat Jul 12 22:33:31 2025
--- gcc-15-20250719/libgm2/libm2iso/Makefile.am	Sat Jul 19 22:34:00 2025
*************** M2DEFS = ChanConsts.def  CharClass.def \
*** 104,109 ****
--- 104,110 ----
           ConvTypes.def  COROUTINES.def \
           ErrnoCategory.def  EXCEPTIONS.def \
           GeneralUserExceptions.def  IOChan.def \
+          IOChanUtils.def \
           IOConsts.def  IOLink.def \
           IOResult.def  LongComplexMath.def \
           LongConv.def  LongIO.def \
*************** M2MODS = ChanConsts.mod  CharClass.mod \
*** 149,155 ****
           ConvStringShort.mod \
           ConvTypes.mod  COROUTINES.mod \
           EXCEPTIONS.mod  GeneralUserExceptions.mod \
!          IOChan.mod  IOConsts.mod \
           IOLink.mod  IOResult.mod \
           LongComplexMath.mod  LongConv.mod \
           LongIO.mod  LongMath.mod \
--- 150,157 ----
           ConvStringShort.mod \
           ConvTypes.mod  COROUTINES.mod \
           EXCEPTIONS.mod  GeneralUserExceptions.mod \
!          IOChan.mod  IOChanUtils.mod \
!          IOConsts.mod \
           IOLink.mod  IOResult.mod \
           LongComplexMath.mod  LongConv.mod \
           LongIO.mod  LongMath.mod \
diff -Nrcpad gcc-15-20250712/libgm2/libm2iso/Makefile.in gcc-15-20250719/libgm2/libm2iso/Makefile.in
*** gcc-15-20250712/libgm2/libm2iso/Makefile.in	Sat Jul 12 22:33:31 2025
--- gcc-15-20250719/libgm2/libm2iso/Makefile.in	Sat Jul 19 22:34:00 2025
*************** libm2iso_la_LIBADD =
*** 163,178 ****
  @BUILD_ISOLIB_TRUE@	ConvStringShort.lo ConvTypes.lo \
  @BUILD_ISOLIB_TRUE@	COROUTINES.lo EXCEPTIONS.lo \
  @BUILD_ISOLIB_TRUE@	GeneralUserExceptions.lo IOChan.lo \
! @BUILD_ISOLIB_TRUE@	IOConsts.lo IOLink.lo IOResult.lo \
! @BUILD_ISOLIB_TRUE@	LongComplexMath.lo LongConv.lo LongIO.lo \
! @BUILD_ISOLIB_TRUE@	LongMath.lo LongStr.lo LongWholeIO.lo \
! @BUILD_ISOLIB_TRUE@	LowLong.lo LowReal.lo LowShort.lo \
! @BUILD_ISOLIB_TRUE@	M2EXCEPTION.lo M2RTS.lo MemStream.lo \
! @BUILD_ISOLIB_TRUE@	Preemptive.lo Processes.lo ProgramArgs.lo \
! @BUILD_ISOLIB_TRUE@	RandomNumber.lo RawIO.lo RealConv.lo \
! @BUILD_ISOLIB_TRUE@	RealIO.lo RealMath.lo RealStr.lo RndFile.lo \
! @BUILD_ISOLIB_TRUE@	RTdata.lo RTentity.lo RTfio.lo RTgenif.lo \
! @BUILD_ISOLIB_TRUE@	RTgen.lo RTio.lo Semaphores.lo SeqFile.lo \
  @BUILD_ISOLIB_TRUE@	ShortComplexMath.lo ShortConv.lo ShortIO.lo \
  @BUILD_ISOLIB_TRUE@	ShortMath.lo ShortStr.lo ShortWholeIO.lo \
  @BUILD_ISOLIB_TRUE@	SimpleCipher.lo SIOResult.lo SLongIO.lo \
--- 163,179 ----
  @BUILD_ISOLIB_TRUE@	ConvStringShort.lo ConvTypes.lo \
  @BUILD_ISOLIB_TRUE@	COROUTINES.lo EXCEPTIONS.lo \
  @BUILD_ISOLIB_TRUE@	GeneralUserExceptions.lo IOChan.lo \
! @BUILD_ISOLIB_TRUE@	IOChanUtils.lo IOConsts.lo IOLink.lo \
! @BUILD_ISOLIB_TRUE@	IOResult.lo LongComplexMath.lo LongConv.lo \
! @BUILD_ISOLIB_TRUE@	LongIO.lo LongMath.lo LongStr.lo \
! @BUILD_ISOLIB_TRUE@	LongWholeIO.lo LowLong.lo LowReal.lo \
! @BUILD_ISOLIB_TRUE@	LowShort.lo M2EXCEPTION.lo M2RTS.lo \
! @BUILD_ISOLIB_TRUE@	MemStream.lo Preemptive.lo Processes.lo \
! @BUILD_ISOLIB_TRUE@	ProgramArgs.lo RandomNumber.lo RawIO.lo \
! @BUILD_ISOLIB_TRUE@	RealConv.lo RealIO.lo RealMath.lo \
! @BUILD_ISOLIB_TRUE@	RealStr.lo RndFile.lo RTdata.lo RTentity.lo \
! @BUILD_ISOLIB_TRUE@	RTfio.lo RTgenif.lo RTgen.lo RTio.lo \
! @BUILD_ISOLIB_TRUE@	Semaphores.lo SeqFile.lo \
  @BUILD_ISOLIB_TRUE@	ShortComplexMath.lo ShortConv.lo ShortIO.lo \
  @BUILD_ISOLIB_TRUE@	ShortMath.lo ShortStr.lo ShortWholeIO.lo \
  @BUILD_ISOLIB_TRUE@	SimpleCipher.lo SIOResult.lo SLongIO.lo \
*************** FLAGS_TO_PASS = $(AM_MAKEFLAGS)
*** 492,497 ****
--- 493,499 ----
  @BUILD_ISOLIB_TRUE@         ConvTypes.def  COROUTINES.def \
  @BUILD_ISOLIB_TRUE@         ErrnoCategory.def  EXCEPTIONS.def \
  @BUILD_ISOLIB_TRUE@         GeneralUserExceptions.def  IOChan.def \
+ @BUILD_ISOLIB_TRUE@         IOChanUtils.def \
  @BUILD_ISOLIB_TRUE@         IOConsts.def  IOLink.def \
  @BUILD_ISOLIB_TRUE@         IOResult.def  LongComplexMath.def \
  @BUILD_ISOLIB_TRUE@         LongConv.def  LongIO.def \
*************** FLAGS_TO_PASS = $(AM_MAKEFLAGS)
*** 537,543 ****
  @BUILD_ISOLIB_TRUE@         ConvStringShort.mod \
  @BUILD_ISOLIB_TRUE@         ConvTypes.mod  COROUTINES.mod \
  @BUILD_ISOLIB_TRUE@         EXCEPTIONS.mod  GeneralUserExceptions.mod \
! @BUILD_ISOLIB_TRUE@         IOChan.mod  IOConsts.mod \
  @BUILD_ISOLIB_TRUE@         IOLink.mod  IOResult.mod \
  @BUILD_ISOLIB_TRUE@         LongComplexMath.mod  LongConv.mod \
  @BUILD_ISOLIB_TRUE@         LongIO.mod  LongMath.mod \
--- 539,546 ----
  @BUILD_ISOLIB_TRUE@         ConvStringShort.mod \
  @BUILD_ISOLIB_TRUE@         ConvTypes.mod  COROUTINES.mod \
  @BUILD_ISOLIB_TRUE@         EXCEPTIONS.mod  GeneralUserExceptions.mod \
! @BUILD_ISOLIB_TRUE@         IOChan.mod  IOChanUtils.mod \
! @BUILD_ISOLIB_TRUE@         IOConsts.mod \
  @BUILD_ISOLIB_TRUE@         IOLink.mod  IOResult.mod \
  @BUILD_ISOLIB_TRUE@         LongComplexMath.mod  LongConv.mod \
  @BUILD_ISOLIB_TRUE@         LongIO.mod  LongMath.mod \
diff -Nrcpad gcc-15-20250712/libgm2/libm2pim/CFileSysOp.cc gcc-15-20250719/libgm2/libm2pim/CFileSysOp.cc
*** gcc-15-20250712/libgm2/libm2pim/CFileSysOp.cc	Thu Jan  1 00:00:00 1970
--- gcc-15-20250719/libgm2/libm2pim/CFileSysOp.cc	Sat Jul 19 22:34:00 2025
***************
*** 0 ****
--- 1,145 ----
+ 
+ 
+ /* A C++ implementation for CFileSysOp.def.  This file will use
+    autoconf to test for the presence of operating system facilities.  */
+ 
+ #include <config.h>
+ #include <m2rts.h>
+ 
+ #define EXPORT(FUNC) m2pim ## _CFileSysOp_ ## FUNC
+ #define M2EXPORT(FUNC) m2pim ## _M2_CFileSysOp_ ## FUNC
+ #define M2LIBNAME "m2pim"
+ 
+ #if defined(HAVE_STDLIB_H)
+ #include <stdlib.h>
+ #endif
+ 
+ #if defined(HAVE_UNISTD_H)
+ #include <unistd.h>
+ #endif
+ 
+ #if defined(HAVE_SYS_STAT_H)
+ #include <sys/stat.h>
+ #endif
+ 
+ #ifdef HAVE_STDIO_H
+ #include <stdio.h>
+ #endif
+ 
+ #if defined(HAVE_SYS_TYPES_H)
+ #include <sys/types.h>
+ #endif
+ 
+ #ifdef HAVE_FCNTL_H
+ #include <fcntl.h>
+ #endif
+ 
+ /* Define a generic NULL if one hasn't already been defined.  */
+ 
+ #if !defined(NULL)
+ #define NULL 0
+ #endif
+ 
+ #define A_FAIL (1<<5)
+ 
+ 
+ extern "C" int
+ EXPORT(Unlink) (char *filename)
+ {
+ #if defined(HAVE_UNLINK)
+   return unlink (filename);
+ #else
+   return -1;
+ #endif
+ }
+ 
+ 
+ /* Access test access to a path or file.  The behavior is
+    the same as defined in access(2).  Except that A_FAIL
+    is only used during the return result indicating the
+    underlying C access has returned -1 (and errno can be
+    checked).  */
+ 
+ extern "C" int
+ EXPORT(Access) (char *pathname, int mode)
+ {
+ #if defined(HAVE_ACCESS)
+   int result = access (pathname, mode);
+ 
+   if (result == -1)
+     return A_FAIL;
+   return result;
+ #else
+   return A_FAIL;
+ #endif
+ }
+ 
+ 
+ /* Exists return true if pathname exists.  */
+ 
+ extern "C" bool
+ EXPORT(Exists) (char *pathname)
+ {
+ #if defined(HAVE_ACCESS)
+   return (access (pathname, F_OK) == 0);
+ #else
+   return false;
+ #endif
+ }
+ 
+ /* IsDir return true if filename is a regular directory.  */
+ 
+ extern "C" bool
+ EXPORT(IsDir) (char *dirname)
+ {
+ #if defined(HAVE_SYS_STAT_H) && defined(HAVE_STRUCT_STAT)
+   struct stat dir_stat;
+   int res = stat (dirname, (struct stat *)&dir_stat);
+   if (res == 0)
+     return (dir_stat.st_mode & S_IFMT) == S_IFDIR;
+   return false;
+ #else
+   return false;
+ #endif
+ }
+ 
+ /* IsFile return true if filename is a regular file.  */
+ 
+ extern "C" bool
+ EXPORT(IsFile) (char *filename)
+ {
+ #if defined(HAVE_SYS_STAT_H) && defined(HAVE_STRUCT_STAT)
+   struct stat file_stat;
+   int res = stat (filename, (struct stat *)&file_stat);
+   if (res == 0)
+     return (file_stat.st_mode & S_IFMT) == S_IFREG;
+   return false;
+ #else
+   return false;
+ #endif
+ }
+ 
+ /* GNU Modula-2 linking hooks.  */
+ 
+ extern "C" void
+ M2EXPORT(init) (int, char **, char **)
+ {
+ }
+ 
+ extern "C" void
+ M2EXPORT(fini) (int, char **, char **)
+ {
+ }
+ 
+ extern "C" void
+ M2EXPORT(dep) (void)
+ {
+ }
+ 
+ extern "C" void __attribute__((__constructor__))
+ M2EXPORT(ctor) (void)
+ {
+   m2pim_M2RTS_RegisterModule ("CfileSysOp", M2LIBNAME,
+ 			      M2EXPORT(init), M2EXPORT(fini),
+ 			      M2EXPORT(dep));
+ }
diff -Nrcpad gcc-15-20250712/libgm2/libm2pim/Makefile.am gcc-15-20250719/libgm2/libm2pim/Makefile.am
*** gcc-15-20250712/libgm2/libm2pim/Makefile.am	Sat Jul 12 22:33:31 2025
--- gcc-15-20250719/libgm2/libm2pim/Makefile.am	Sat Jul 19 22:34:00 2025
*************** M2MODS = ASCII.mod IO.mod \
*** 118,131 ****
         Indexing.mod \
         LMathLib0.mod LegacyReal.mod \
         MemUtils.mod gdbif.mod \
!        GetOpt.mod OptLib.mod
  
  # COROUTINES.mod has been removed as it is implemented in ../libm2iso.
  
  M2DEFS = Args.def   ASCII.def \
           Assertion.def  Break.def \
           Builtins.def  cbuiltin.def \
!          CmdArgs.def COROUTINES.def \
           cxxabi.def  Debug.def \
           dtoa.def  DynamicStrings.def \
           Environment.def  errno.def \
--- 118,137 ----
         Indexing.mod \
         LMathLib0.mod LegacyReal.mod \
         MemUtils.mod gdbif.mod \
!        GetOpt.mod OptLib.mod \
!        ARRAYOFCHAR.mod \
!        CHAR.mod \
!        StringFileSysOp.mod \
!        String.mod \
!        FileSysOp.mod
  
  # COROUTINES.mod has been removed as it is implemented in ../libm2iso.
  
  M2DEFS = Args.def   ASCII.def \
           Assertion.def  Break.def \
           Builtins.def  cbuiltin.def \
!          CmdArgs.def CFileSysOp.def \
!          COROUTINES.def \
           cxxabi.def  Debug.def \
           dtoa.def  DynamicStrings.def \
           Environment.def  errno.def \
*************** M2DEFS = Args.def   ASCII.def \
*** 153,159 ****
           termios.def  TimeString.def \
           UnixArgs.def  wrapc.def  \
           GetOpt.def OptLib.def \
!          cgetopt.def
  
  libm2pim_la_SOURCES = $(M2MODS) \
                        UnixArgs.cc \
--- 159,170 ----
           termios.def  TimeString.def \
           UnixArgs.def  wrapc.def  \
           GetOpt.def OptLib.def \
!          cgetopt.def \
!          ARRAYOFCHAR.def \
!          CHAR.def \
!          StringFileSysOp.def \
!          String.def \
!          FileSysOp.def
  
  libm2pim_la_SOURCES = $(M2MODS) \
                        UnixArgs.cc \
*************** libm2pim_la_SOURCES = $(M2MODS) \
*** 161,167 ****
                        errno.cc dtoa.cc \
                        ldtoa.cc termios.cc \
                        SysExceptions.cc target.c \
!                       wrapc.cc cgetopt.cc
  
  libm2pimdir = libm2pim
  libm2pim_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2pim_la_SOURCES)))
--- 172,179 ----
                        errno.cc dtoa.cc \
                        ldtoa.cc termios.cc \
                        SysExceptions.cc target.c \
!                       wrapc.cc cgetopt.cc \
!                       CFileSysOp.cc
  
  libm2pimdir = libm2pim
  libm2pim_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2pim_la_SOURCES)))
diff -Nrcpad gcc-15-20250712/libgm2/libm2pim/Makefile.in gcc-15-20250719/libgm2/libm2pim/Makefile.in
*** gcc-15-20250712/libgm2/libm2pim/Makefile.in	Sat Jul 12 22:33:31 2025
--- gcc-15-20250719/libgm2/libm2pim/Makefile.in	Sat Jul 19 22:34:00 2025
*************** libm2pim_la_LIBADD =
*** 169,180 ****
  @BUILD_PIMLIB_TRUE@	Builtins.lo MathLib0.lo M2EXCEPTION.lo \
  @BUILD_PIMLIB_TRUE@	RTExceptions.lo SMathLib0.lo RTint.lo \
  @BUILD_PIMLIB_TRUE@	Indexing.lo LMathLib0.lo LegacyReal.lo \
! @BUILD_PIMLIB_TRUE@	MemUtils.lo gdbif.lo GetOpt.lo OptLib.lo
  @BUILD_PIMLIB_TRUE@am_libm2pim_la_OBJECTS = $(am__objects_1) \
  @BUILD_PIMLIB_TRUE@	UnixArgs.lo Selective.lo sckt.lo errno.lo \
  @BUILD_PIMLIB_TRUE@	dtoa.lo ldtoa.lo termios.lo \
  @BUILD_PIMLIB_TRUE@	SysExceptions.lo libm2pim_la-target.lo \
! @BUILD_PIMLIB_TRUE@	wrapc.lo cgetopt.lo
  libm2pim_la_OBJECTS = $(am_libm2pim_la_OBJECTS)
  @BUILD_PIMLIB_TRUE@am_libm2pim_la_rpath = -rpath $(toolexeclibdir)
  AM_V_P = $(am__v_P_@AM_V@)
--- 169,182 ----
  @BUILD_PIMLIB_TRUE@	Builtins.lo MathLib0.lo M2EXCEPTION.lo \
  @BUILD_PIMLIB_TRUE@	RTExceptions.lo SMathLib0.lo RTint.lo \
  @BUILD_PIMLIB_TRUE@	Indexing.lo LMathLib0.lo LegacyReal.lo \
! @BUILD_PIMLIB_TRUE@	MemUtils.lo gdbif.lo GetOpt.lo OptLib.lo \
! @BUILD_PIMLIB_TRUE@	ARRAYOFCHAR.lo CHAR.lo StringFileSysOp.lo \
! @BUILD_PIMLIB_TRUE@	String.lo FileSysOp.lo
  @BUILD_PIMLIB_TRUE@am_libm2pim_la_OBJECTS = $(am__objects_1) \
  @BUILD_PIMLIB_TRUE@	UnixArgs.lo Selective.lo sckt.lo errno.lo \
  @BUILD_PIMLIB_TRUE@	dtoa.lo ldtoa.lo termios.lo \
  @BUILD_PIMLIB_TRUE@	SysExceptions.lo libm2pim_la-target.lo \
! @BUILD_PIMLIB_TRUE@	wrapc.lo cgetopt.lo CFileSysOp.lo
  libm2pim_la_OBJECTS = $(am_libm2pim_la_OBJECTS)
  @BUILD_PIMLIB_TRUE@am_libm2pim_la_rpath = -rpath $(toolexeclibdir)
  AM_V_P = $(am__v_P_@AM_V@)
*************** FLAGS_TO_PASS = $(AM_MAKEFLAGS)
*** 495,508 ****
  @BUILD_PIMLIB_TRUE@       Indexing.mod \
  @BUILD_PIMLIB_TRUE@       LMathLib0.mod LegacyReal.mod \
  @BUILD_PIMLIB_TRUE@       MemUtils.mod gdbif.mod \
! @BUILD_PIMLIB_TRUE@       GetOpt.mod OptLib.mod
  
  
  # COROUTINES.mod has been removed as it is implemented in ../libm2iso.
  @BUILD_PIMLIB_TRUE@M2DEFS = Args.def   ASCII.def \
  @BUILD_PIMLIB_TRUE@         Assertion.def  Break.def \
  @BUILD_PIMLIB_TRUE@         Builtins.def  cbuiltin.def \
! @BUILD_PIMLIB_TRUE@         CmdArgs.def COROUTINES.def \
  @BUILD_PIMLIB_TRUE@         cxxabi.def  Debug.def \
  @BUILD_PIMLIB_TRUE@         dtoa.def  DynamicStrings.def \
  @BUILD_PIMLIB_TRUE@         Environment.def  errno.def \
--- 497,516 ----
  @BUILD_PIMLIB_TRUE@       Indexing.mod \
  @BUILD_PIMLIB_TRUE@       LMathLib0.mod LegacyReal.mod \
  @BUILD_PIMLIB_TRUE@       MemUtils.mod gdbif.mod \
! @BUILD_PIMLIB_TRUE@       GetOpt.mod OptLib.mod \
! @BUILD_PIMLIB_TRUE@       ARRAYOFCHAR.mod \
! @BUILD_PIMLIB_TRUE@       CHAR.mod \
! @BUILD_PIMLIB_TRUE@       StringFileSysOp.mod \
! @BUILD_PIMLIB_TRUE@       String.mod \
! @BUILD_PIMLIB_TRUE@       FileSysOp.mod
  
  
  # COROUTINES.mod has been removed as it is implemented in ../libm2iso.
  @BUILD_PIMLIB_TRUE@M2DEFS = Args.def   ASCII.def \
  @BUILD_PIMLIB_TRUE@         Assertion.def  Break.def \
  @BUILD_PIMLIB_TRUE@         Builtins.def  cbuiltin.def \
! @BUILD_PIMLIB_TRUE@         CmdArgs.def CFileSysOp.def \
! @BUILD_PIMLIB_TRUE@         COROUTINES.def \
  @BUILD_PIMLIB_TRUE@         cxxabi.def  Debug.def \
  @BUILD_PIMLIB_TRUE@         dtoa.def  DynamicStrings.def \
  @BUILD_PIMLIB_TRUE@         Environment.def  errno.def \
*************** FLAGS_TO_PASS = $(AM_MAKEFLAGS)
*** 530,536 ****
  @BUILD_PIMLIB_TRUE@         termios.def  TimeString.def \
  @BUILD_PIMLIB_TRUE@         UnixArgs.def  wrapc.def  \
  @BUILD_PIMLIB_TRUE@         GetOpt.def OptLib.def \
! @BUILD_PIMLIB_TRUE@         cgetopt.def
  
  @BUILD_PIMLIB_TRUE@libm2pim_la_SOURCES = $(M2MODS) \
  @BUILD_PIMLIB_TRUE@                      UnixArgs.cc \
--- 538,549 ----
  @BUILD_PIMLIB_TRUE@         termios.def  TimeString.def \
  @BUILD_PIMLIB_TRUE@         UnixArgs.def  wrapc.def  \
  @BUILD_PIMLIB_TRUE@         GetOpt.def OptLib.def \
! @BUILD_PIMLIB_TRUE@         cgetopt.def \
! @BUILD_PIMLIB_TRUE@         ARRAYOFCHAR.def \
! @BUILD_PIMLIB_TRUE@         CHAR.def \
! @BUILD_PIMLIB_TRUE@         StringFileSysOp.def \
! @BUILD_PIMLIB_TRUE@         String.def \
! @BUILD_PIMLIB_TRUE@         FileSysOp.def
  
  @BUILD_PIMLIB_TRUE@libm2pim_la_SOURCES = $(M2MODS) \
  @BUILD_PIMLIB_TRUE@                      UnixArgs.cc \
*************** FLAGS_TO_PASS = $(AM_MAKEFLAGS)
*** 538,544 ****
  @BUILD_PIMLIB_TRUE@                      errno.cc dtoa.cc \
  @BUILD_PIMLIB_TRUE@                      ldtoa.cc termios.cc \
  @BUILD_PIMLIB_TRUE@                      SysExceptions.cc target.c \
! @BUILD_PIMLIB_TRUE@                      wrapc.cc cgetopt.cc
  
  @BUILD_PIMLIB_TRUE@libm2pimdir = libm2pim
  @BUILD_PIMLIB_TRUE@libm2pim_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2pim_la_SOURCES)))
--- 551,558 ----
  @BUILD_PIMLIB_TRUE@                      errno.cc dtoa.cc \
  @BUILD_PIMLIB_TRUE@                      ldtoa.cc termios.cc \
  @BUILD_PIMLIB_TRUE@                      SysExceptions.cc target.c \
! @BUILD_PIMLIB_TRUE@                      wrapc.cc cgetopt.cc \
! @BUILD_PIMLIB_TRUE@                      CFileSysOp.cc
  
  @BUILD_PIMLIB_TRUE@libm2pimdir = libm2pim
  @BUILD_PIMLIB_TRUE@libm2pim_la_DEPENDENCIES = SYSTEM.def $(addsuffix .lo, $(basename $(libm2pim_la_SOURCES)))
*************** mostlyclean-compile:
*** 639,644 ****
--- 653,659 ----
  distclean-compile:
  	-rm -f *.tab.c
  
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CFileSysOp.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Selective.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SysExceptions.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnixArgs.Plo@am__quote@
diff -Nrcpad gcc-15-20250712/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt gcc-15-20250719/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
*** gcc-15-20250712/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt	Sat Jul 12 22:33:41 2025
--- gcc-15-20250719/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt	Sat Jul 19 22:34:07 2025
*************** FUNC:_ZNSt12__shared_ptrINSt10filesystem
*** 2124,2129 ****
--- 2124,2133 ----
  FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28
  FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27
  FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26
+ FUNC:_ZNSt12__sso_stringC1Ev@@GLIBCXX_3.4.34
+ FUNC:_ZNSt12__sso_stringC2Ev@@GLIBCXX_3.4.34
+ FUNC:_ZNSt12__sso_stringD1Ev@@GLIBCXX_3.4.34
+ FUNC:_ZNSt12__sso_stringD2Ev@@GLIBCXX_3.4.34
  FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15
  FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15
  FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15
*************** FUNC:_ZNSt7__cxx1112basic_stringIcSt11ch
*** 3221,3226 ****
--- 3225,3232 ----
  FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23
  FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcRKS3_@@GLIBCXX_3.4.21
  FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructEjc@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb0EEEvPKcj@@GLIBCXX_3.4.34
+ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructILb1EEEvPKcj@@GLIBCXX_3.4.34
  FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKcS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21
  FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21
  FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21
*************** FUNC:_ZNSt7__cxx1112basic_stringIwSt11ch
*** 3374,3379 ****
--- 3380,3387 ----
  FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23
  FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS3_@@GLIBCXX_3.4.21
  FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructEjw@@GLIBCXX_3.4.21
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb0EEEvPKwj@@GLIBCXX_3.4.34
+ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructILb1EEEvPKwj@@GLIBCXX_3.4.34
  FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPKwS4_EEEEvT_SB_St20forward_iterator_tag@@GLIBCXX_3.4.21
  FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21
  FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21
*************** FUNC:_ZNSt8__detail15_List_node_base11_M
*** 3941,3946 ****
--- 3949,3956 ----
  FUNC:_ZNSt8__detail15_List_node_base4swapERS0_S1_@@GLIBCXX_3.4.15
  FUNC:_ZNSt8__detail15_List_node_base7_M_hookEPS0_@@GLIBCXX_3.4.15
  FUNC:_ZNSt8__detail15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.15
+ FUNC:_ZNSt8__format25__locale_encoding_to_utf8ERKSt6localeSt17basic_string_viewIcSt11char_traitsIcEEPv@@GLIBCXX_3.4.34
+ FUNC:_ZNSt8__format26__with_encoding_conversionERKSt6locale@@GLIBCXX_3.4.34
  FUNC:_ZNSt8bad_castD0Ev@@GLIBCXX_3.4
  FUNC:_ZNSt8bad_castD1Ev@@GLIBCXX_3.4
  FUNC:_ZNSt8bad_castD2Ev@@GLIBCXX_3.4
*************** OBJECT:0:GLIBCXX_3.4.30
*** 4617,4622 ****
--- 4627,4633 ----
  OBJECT:0:GLIBCXX_3.4.31
  OBJECT:0:GLIBCXX_3.4.32
  OBJECT:0:GLIBCXX_3.4.33
+ OBJECT:0:GLIBCXX_3.4.34
  OBJECT:0:GLIBCXX_3.4.4
  OBJECT:0:GLIBCXX_3.4.5
  OBJECT:0:GLIBCXX_3.4.6
