diff -Nrcpad gcc-15-20250927/LAST_UPDATED gcc-15-20251004/LAST_UPDATED
*** gcc-15-20250927/LAST_UPDATED	Sat Sep 27 22:35:06 2025
--- gcc-15-20251004/LAST_UPDATED	Sat Oct  4 22:34:38 2025
***************
*** 1 ****
! Obtained from git: releases/gcc-15 revision 572ff2bae7db9b213531132870a68f449d4154d8
--- 1 ----
! Obtained from git: releases/gcc-15 revision 7ec702536bb759f4b1cc848d5a7670ab01edc90d
diff -Nrcpad gcc-15-20250927/MD5SUMS gcc-15-20251004/MD5SUMS
*** gcc-15-20250927/MD5SUMS	Sat Sep 27 22:35:16 2025
--- gcc-15-20251004/MD5SUMS	Sat Oct  4 22:34:43 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-15-20250927.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-20251004.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
! 26beec4376d44fd760491751bba88132  LAST_UPDATED
  9d2cf5b58292c2e8b0804d3eafc2d6f3  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
--- 25,31 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 76b4d50198c8e8b4c6f4cf23a9135cf6  LAST_UPDATED
  9d2cf5b58292c2e8b0804d3eafc2d6f3  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 551,557 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 9442b26d7cb961985de19c8ce7dabab4  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
! b366e9d7c37faca2364ee9051fecdb1b  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
! b43f305ab7350f8b7923134c08bb7f43  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
! 25eaca750edf3a392f6546c4deedbc82  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** b0607745e568ea27d4cb1091a13ee2ce  gcc/ad
*** 2911,2917 ****
  afaa0a52de285d1aad9c58b79b424a1f  gcc/ada/sem.ads
  4ab25deb814c762e9dcbea9e3fbe4ac8  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
! 278b33ffab0157c51132dcd3fc0daa1b  gcc/ada/sem_attr.adb
  bfe4748123d415f6eb13d89a585468f1  gcc/ada/sem_attr.ads
  4a02c8331cea42852aa409345905ab04  gcc/ada/sem_aux.adb
  3f6d12eb2d9c7a6a829eaf2bda0535a5  gcc/ada/sem_aux.ads
--- 2911,2917 ----
  afaa0a52de285d1aad9c58b79b424a1f  gcc/ada/sem.ads
  4ab25deb814c762e9dcbea9e3fbe4ac8  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
! 5117d2afaf1213276b078ba84a5ead3c  gcc/ada/sem_attr.adb
  bfe4748123d415f6eb13d89a585468f1  gcc/ada/sem_attr.ads
  4a02c8331cea42852aa409345905ab04  gcc/ada/sem_aux.adb
  3f6d12eb2d9c7a6a829eaf2bda0535a5  gcc/ada/sem_aux.ads
*************** a3d3fa9142d4e2ed34ead146941c574a  gcc/co
*** 4919,4925 ****
  fd976e9dd7410889959b27b332b33e1b  gcc/config/riscv/predicates.md
  d8e9516f231ccfe43055b7c49bd115c7  gcc/config/riscv/riscv-avlprop.cc
  3b5651b95f6a076ccd28e73bae600e52  gcc/config/riscv/riscv-builtins.cc
! 4107a71abfd2e5225d66986a671e05a5  gcc/config/riscv/riscv-c.cc
  3b7012a7d47b9aaf163e890d3e29013e  gcc/config/riscv/riscv-cmo.def
  08fc3d4342dd32dd9e649003b3140d1f  gcc/config/riscv/riscv-cores.def
  173996678a5bf2b1b40e30fe260109b4  gcc/config/riscv/riscv-d.cc
--- 4919,4925 ----
  fd976e9dd7410889959b27b332b33e1b  gcc/config/riscv/predicates.md
  d8e9516f231ccfe43055b7c49bd115c7  gcc/config/riscv/riscv-avlprop.cc
  3b5651b95f6a076ccd28e73bae600e52  gcc/config/riscv/riscv-builtins.cc
! d111dbb07d61205c1bdfcb26461d17dc  gcc/config/riscv/riscv-c.cc
  3b7012a7d47b9aaf163e890d3e29013e  gcc/config/riscv/riscv-cmo.def
  08fc3d4342dd32dd9e649003b3140d1f  gcc/config/riscv/riscv-cores.def
  173996678a5bf2b1b40e30fe260109b4  gcc/config/riscv/riscv-d.cc
*************** cc4d538f7d66895b427db54b9660a953  gcc/co
*** 4937,4943 ****
  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
--- 4937,4943 ----
  5934e743da72bdc74e1d53f049b127fc  gcc/config/riscv/riscv-string.cc
  6e4e2a0f934c6d930c9d9243d5c89f92  gcc/config/riscv/riscv-subset.h
  a583d4ec085af9e2f577c155bf259caf  gcc/config/riscv/riscv-target-attr.cc
! e97dfb66eeda9a7437982a45c8f756b4  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
*************** bdc5f6caf56fd0411faf705e9c32ccd4  gcc/co
*** 4945,4953 ****
  7439c310d1c94dcd962b3e1c3cd5d462  gcc/config/riscv/riscv-vector-builtins-shapes.cc
  92a4d3a592ebef60b5ed8a2c0963b75a  gcc/config/riscv/riscv-vector-builtins-shapes.h
  8bb44ae09faa0c992fb3f5abd38f63db  gcc/config/riscv/riscv-vector-builtins-types.def
! 873a88df734d47135f3c07274c42c7c3  gcc/config/riscv/riscv-vector-builtins.cc
  d5729696e4e1e43d59d9a0a80bc8e837  gcc/config/riscv/riscv-vector-builtins.def
! d913150bdc8f6c319cfecb8fb792f47e  gcc/config/riscv/riscv-vector-builtins.h
  3ab2c03f8df3835afe50fe4842b35c33  gcc/config/riscv/riscv-vector-costs.cc
  bd7a0d0d03ad4788f6cf7579df11a66e  gcc/config/riscv/riscv-vector-costs.h
  f51037a9e437f8e9ce7215b2da5ad4e2  gcc/config/riscv/riscv-vector-switch.def
--- 4945,4953 ----
  7439c310d1c94dcd962b3e1c3cd5d462  gcc/config/riscv/riscv-vector-builtins-shapes.cc
  92a4d3a592ebef60b5ed8a2c0963b75a  gcc/config/riscv/riscv-vector-builtins-shapes.h
  8bb44ae09faa0c992fb3f5abd38f63db  gcc/config/riscv/riscv-vector-builtins-types.def
! 696bf7bd909b42a22bc99647accbc24a  gcc/config/riscv/riscv-vector-builtins.cc
  d5729696e4e1e43d59d9a0a80bc8e837  gcc/config/riscv/riscv-vector-builtins.def
! 911e1dc985640a7237450a89e73894ca  gcc/config/riscv/riscv-vector-builtins.h
  3ab2c03f8df3835afe50fe4842b35c33  gcc/config/riscv/riscv-vector-costs.cc
  bd7a0d0d03ad4788f6cf7579df11a66e  gcc/config/riscv/riscv-vector-costs.h
  f51037a9e437f8e9ce7215b2da5ad4e2  gcc/config/riscv/riscv-vector-switch.def
*************** a798cdca802a57ffa3473ab610b37c86  gcc/fo
*** 6059,6065 ****
  4b1bef753dda2d19671f35332c69a0f7  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! e1cfc38b8125de918fceb4d9a3f8b683  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6059,6065 ----
  4b1bef753dda2d19671f35332c69a0f7  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! 70a761a7e5f19fc36de562a6f71c2dda  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** e350765243fa7b881ed82507561870ff  gcc/fo
*** 6137,6143 ****
  8376eba2060129f13c5146a7773b2af7  gcc/fortran/options.cc
  066b089d8a8df7ff652dcc802d982276  gcc/fortran/parse.cc
  09678ef13dc709d251be943d808544b8  gcc/fortran/parse.h
! 8282ea5f4e00d5c64da552ea2f31dcc6  gcc/fortran/primary.cc
  1172de86452b5b1f9983dfb6d0d0789f  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
--- 6137,6143 ----
  8376eba2060129f13c5146a7773b2af7  gcc/fortran/options.cc
  066b089d8a8df7ff652dcc802d982276  gcc/fortran/parse.cc
  09678ef13dc709d251be943d808544b8  gcc/fortran/parse.h
! 8c815c31f49f2be21bde29058fe60166  gcc/fortran/primary.cc
  1172de86452b5b1f9983dfb6d0d0789f  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
*************** c78c72f9e780bf1c0eea63295c5ba590  gcc/fo
*** 6146,6152 ****
  7fc6fb7f159830fc0d98a9cd72e5cdf9  gcc/fortran/symbol.cc
  c9238712914e77b971fde08221a31bf7  gcc/fortran/target-memory.cc
  50451f5a575ab606948f8e72d8cc4721  gcc/fortran/target-memory.h
! 6d5de0711cf335a4a100f5ff822f641c  gcc/fortran/trans-array.cc
  a4f5f15bbfd3cf3b780e3a8875ebf0df  gcc/fortran/trans-array.h
  134a72b3349d427eccb35198acc48a71  gcc/fortran/trans-common.cc
  d555f911945a83db335013815934e941  gcc/fortran/trans-const.cc
--- 6146,6152 ----
  7fc6fb7f159830fc0d98a9cd72e5cdf9  gcc/fortran/symbol.cc
  c9238712914e77b971fde08221a31bf7  gcc/fortran/target-memory.cc
  50451f5a575ab606948f8e72d8cc4721  gcc/fortran/target-memory.h
! 3642bf5789a9f38411283c5e4969c5ab  gcc/fortran/trans-array.cc
  a4f5f15bbfd3cf3b780e3a8875ebf0df  gcc/fortran/trans-array.h
  134a72b3349d427eccb35198acc48a71  gcc/fortran/trans-common.cc
  d555f911945a83db335013815934e941  gcc/fortran/trans-const.cc
*************** d4d9ec95b989fa0422a277b616a1c8b0  gcc/fo
*** 6158,6164 ****
  b1027c10f4a35d0040a0da3b22a13d59  gcc/fortran/trans-openmp.cc
  03aafb32bf3170c38549a2536ebb7e4c  gcc/fortran/trans-stmt.cc
  3e46866176ab0bac5fb67ed27515535d  gcc/fortran/trans-stmt.h
! 3910394d74aab50fba42ab60b9b75ad3  gcc/fortran/trans-types.cc
  422959ab20fd75df3766a03597227fd2  gcc/fortran/trans-types.h
  c058a3abcdadde24710d79820f9cfc70  gcc/fortran/trans.cc
  13445b3cfeaf8978ee1d89a1997de16d  gcc/fortran/trans.h
--- 6158,6164 ----
  b1027c10f4a35d0040a0da3b22a13d59  gcc/fortran/trans-openmp.cc
  03aafb32bf3170c38549a2536ebb7e4c  gcc/fortran/trans-stmt.cc
  3e46866176ab0bac5fb67ed27515535d  gcc/fortran/trans-stmt.h
! 9049e0774b5c644f57037cf58f99c201  gcc/fortran/trans-types.cc
  422959ab20fd75df3766a03597227fd2  gcc/fortran/trans-types.h
  c058a3abcdadde24710d79820f9cfc70  gcc/fortran/trans.cc
  13445b3cfeaf8978ee1d89a1997de16d  gcc/fortran/trans.h
*************** b1497a03867668af210c32280876fdd7  gcc/sy
*** 8446,8452 ****
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 1ded907e12ca0c2cd8b1fb579905d1b1  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8446,8452 ----
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 119973d754f271ac3f0f686c1b44227f  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** a0ec9e9b1278bec59b5f6fb4473ae0be  gcc/te
*** 88343,88348 ****
--- 88343,88352 ----
  9ae56141fab814505fcf7366ef12db85  gcc/testsuite/gcc.target/riscv/li.c
  6308e09d3e5133433b97e26dcb02daba  gcc/testsuite/gcc.target/riscv/load-immediate.c
  7530069d23aa7990ff78ecce4ac40cae  gcc/testsuite/gcc.target/riscv/losum-overflow.c
+ ce3b187939b87fc213b6c10c98975fc0  gcc/testsuite/gcc.target/riscv/lto/pr110812_0.c
+ cbd4eeb25a9dd3d6d0da83efc1b0bcfb  gcc/testsuite/gcc.target/riscv/lto/pr110812_1.c
+ 6e00e4b567840db065e76d03e81f08dc  gcc/testsuite/gcc.target/riscv/lto/riscv-lto.exp
+ 979e78c5ed1d2ba91a46584480362b26  gcc/testsuite/gcc.target/riscv/lto/riscv_vector.h
  7a85a9d76321b19b1c9a5242b0715dd4  gcc/testsuite/gcc.target/riscv/matrix_add_const.c
  921c846f9d343bd139a635f83e6db437  gcc/testsuite/gcc.target/riscv/mcpu-1.c
  84a4693e36dd49686414997cb37fc127  gcc/testsuite/gcc.target/riscv/mcpu-2.c
*************** e7ca8fe6239410f9affbff1106fd2d15  gcc/te
*** 89532,89537 ****
--- 89536,89544 ----
  446b0327be112ddedf3f8db6bc96d603  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr119224.c
  97a2ebde6fd6564be1fe7abc131eb066  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120356.c
  cf801f2e1c669d164d4ceb3cd657f647  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121510.c
+ ed132fcfade8212b992e822b341be9eb  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121742.c
+ eda1f0d5c82c50988ede53858da3cabd  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121780.c
+ cbc44c5c7fa77e3f0d3efc55779bba4b  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121781.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
*************** d922e822af6878c17645657a31f3a9ee  gcc/te
*** 99657,99662 ****
--- 99664,99670 ----
  f082841753f64949d8329e00653460ec  gcc/testsuite/gfortran.dg/alloc_comp_assign_14.f08
  85b8ed4293af5c7bd2103a9d510c2d38  gcc/testsuite/gfortran.dg/alloc_comp_assign_15.f03
  ae9a8153879a562e6eaad8b096b2f86b  gcc/testsuite/gfortran.dg/alloc_comp_assign_16.f03
+ 24801c6979936a4bda1ff676ac369104  gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90
  552851693306221f925e1819ce51de3f  gcc/testsuite/gfortran.dg/alloc_comp_assign_2.f90
  42f08bf1aab342b9e46a1eca61a4eba8  gcc/testsuite/gfortran.dg/alloc_comp_assign_3.f90
  46cc93b771f780be474234fcd524c4e6  gcc/testsuite/gfortran.dg/alloc_comp_assign_4.f90
*************** c8ca7a67e0b9c502e7883c6187a3b1f3  gcc/te
*** 101836,101841 ****
--- 101844,101850 ----
  f69f56fb4872918c466c7554afc79da9  gcc/testsuite/gfortran.dg/deferred_character_36.f90
  0c1889dba05d51d0a09b189a6caa16c0  gcc/testsuite/gfortran.dg/deferred_character_37.f90
  51fc8b5f96812427754c555184ed2c63  gcc/testsuite/gfortran.dg/deferred_character_38.f90
+ 215823acf008351c1205acdb4e513f5e  gcc/testsuite/gfortran.dg/deferred_character_39.f90
  5eede6c791f6d272034f9b84850ac6af  gcc/testsuite/gfortran.dg/deferred_character_4.f90
  981b809300de368e8fac65be4b40099c  gcc/testsuite/gfortran.dg/deferred_character_5.f90
  b8df78111bec4d4d4b97da6a15228361  gcc/testsuite/gfortran.dg/deferred_character_6.f90
*************** d470ada2b4a8aa6d586007ab8f6e7e5f  gcc/te
*** 112200,112205 ****
--- 112209,112215 ----
  fde5d5ed0c271572ac7da0e31e22bc5c  gcc/testsuite/gnat.dg/range_check7.adb
  25b5534a4bc4502074ce6463c2f5e96b  gcc/testsuite/gnat.dg/rational_arithmetic.ads
  46cc8f530fa18a6afd30b9d241f7967e  gcc/testsuite/gnat.dg/recursive_call.adb
+ 91cab892d1898f9564d603cfa1201d11  gcc/testsuite/gnat.dg/reduce1.adb
  50be8d98f4f9ac99d64926a10596a2df  gcc/testsuite/gnat.dg/ref_type.adb
  5457827e708b7bfc92ffe5610655a443  gcc/testsuite/gnat.dg/ref_type.ads
  222b5d10f23a2e8e8a5e4d41e86e66ed  gcc/testsuite/gnat.dg/regpat1.adb
diff -Nrcpad gcc-15-20250927/gcc/DATESTAMP gcc-15-20251004/gcc/DATESTAMP
*** gcc-15-20250927/gcc/DATESTAMP	Sat Sep 27 22:32:42 2025
--- gcc-15-20251004/gcc/DATESTAMP	Sat Oct  4 22:32:28 2025
***************
*** 1 ****
! 20250927
--- 1 ----
! 20251002
diff -Nrcpad gcc-15-20250927/gcc/ada/ChangeLog gcc-15-20251004/gcc/ada/ChangeLog
*** gcc-15-20250927/gcc/ada/ChangeLog	Sat Sep 27 22:32:42 2025
--- gcc-15-20251004/gcc/ada/ChangeLog	Sat Oct  4 22:32:28 2025
***************
*** 1,3 ****
--- 1,9 ----
+ 2025-09-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/117517
+ 	* sem_attr.adb (Resolve_Attribute) <Attribute_Reduce>: Try to
+ 	resolve the reducer first.  Fix casing of error message.
+ 
  2025-09-22  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/121968
diff -Nrcpad gcc-15-20250927/gcc/ada/sem_attr.adb gcc-15-20251004/gcc/ada/sem_attr.adb
*** gcc-15-20250927/gcc/ada/sem_attr.adb	Sat Sep 27 22:32:43 2025
--- gcc-15-20251004/gcc/ada/sem_attr.adb	Sat Oct  4 22:32:32 2025
*************** package body Sem_Attr is
*** 12723,12729 ****
                 end Proper_Op;
  
              begin
!                Resolve (Init_Value_Exp, Typ);
                 if Is_Overloaded (Reducer_Subp_Name) then
                    Outer :
                    for Retry in Boolean loop
--- 12723,12732 ----
                 end Proper_Op;
  
              begin
!                --  First try to resolve the reducer and then, if this succeeds,
!                --  resolve the initial value.  This nicely deals with confused
!                --  programmers who swap the two items.
! 
                 if Is_Overloaded (Reducer_Subp_Name) then
                    Outer :
                    for Retry in Boolean loop
*************** package body Sem_Attr is
*** 12745,12758 ****
                 then
                    Op := Reducer_Subp_Name;
  
!                elsif Proper_Op (Entity (Reducer_Subp_Name)) then
                    Op := Entity (Reducer_Subp_Name);
                    Set_Etype (N, Typ);
                 end if;
  
                 if No (Op) then
!                   Error_Msg_N ("No suitable reducer subprogram found",
                      Reducer_Subp_Name);
                 end if;
              end;
  
--- 12748,12765 ----
                 then
                    Op := Reducer_Subp_Name;
  
!                elsif Is_Entity_Name (Reducer_Subp_Name)
!                  and then Proper_Op (Entity (Reducer_Subp_Name))
!                then
                    Op := Entity (Reducer_Subp_Name);
                    Set_Etype (N, Typ);
                 end if;
  
                 if No (Op) then
!                   Error_Msg_N ("no suitable reducer subprogram found",
                      Reducer_Subp_Name);
+                else
+                   Resolve (Init_Value_Exp, Typ);
                 end if;
              end;
  
diff -Nrcpad gcc-15-20250927/gcc/config/riscv/riscv-c.cc gcc-15-20251004/gcc/config/riscv/riscv-c.cc
*** gcc-15-20250927/gcc/config/riscv/riscv-c.cc	Sat Sep 27 22:32:44 2025
--- gcc-15-20251004/gcc/config/riscv/riscv-c.cc	Sat Oct  4 22:32:39 2025
*************** along with GCC; see the file COPYING3.
*** 34,110 ****
  
  #define builtin_define(TXT) cpp_define (pfile, TXT)
  
- struct pragma_intrinsic_flags
- {
-   int intrinsic_target_flags;
- 
-   int intrinsic_riscv_vector_elen_flags;
-   int intrinsic_riscv_zvl_flags;
-   int intrinsic_riscv_zvb_subext;
-   int intrinsic_riscv_zvk_subext;
- };
- 
- static void
- riscv_pragma_intrinsic_flags_pollute (struct pragma_intrinsic_flags *flags)
- {
-   flags->intrinsic_target_flags = target_flags;
-   flags->intrinsic_riscv_vector_elen_flags = riscv_vector_elen_flags;
-   flags->intrinsic_riscv_zvl_flags = riscv_zvl_flags;
-   flags->intrinsic_riscv_zvb_subext = riscv_zvb_subext;
-   flags->intrinsic_riscv_zvk_subext = riscv_zvk_subext;
- 
-   target_flags = target_flags
-     | MASK_VECTOR;
- 
-   riscv_zvl_flags = riscv_zvl_flags
-     | MASK_ZVL32B
-     | MASK_ZVL64B
-     | MASK_ZVL128B
-     | MASK_ZVL256B
-     | MASK_ZVL512B
-     | MASK_ZVL1024B
-     | MASK_ZVL2048B
-     | MASK_ZVL4096B;
- 
-   riscv_vector_elen_flags = riscv_vector_elen_flags
-     | MASK_VECTOR_ELEN_32
-     | MASK_VECTOR_ELEN_64
-     | MASK_VECTOR_ELEN_FP_16
-     | MASK_VECTOR_ELEN_FP_32
-     | MASK_VECTOR_ELEN_FP_64;
- 
-   riscv_zvb_subext = riscv_zvb_subext
-     | MASK_ZVBB
-     | MASK_ZVBC
-     | MASK_ZVKB;
- 
-   riscv_zvk_subext = riscv_zvk_subext
-     | MASK_ZVKG
-     | MASK_ZVKNED
-     | MASK_ZVKNHA
-     | MASK_ZVKNHB
-     | MASK_ZVKSED
-     | MASK_ZVKSH
-     | MASK_ZVKN
-     | MASK_ZVKNC
-     | MASK_ZVKNG
-     | MASK_ZVKS
-     | MASK_ZVKSC
-     | MASK_ZVKSG
-     | MASK_ZVKT;
- }
- 
- static void
- riscv_pragma_intrinsic_flags_restore (struct pragma_intrinsic_flags *flags)
- {
-   target_flags = flags->intrinsic_target_flags;
- 
-   riscv_vector_elen_flags = flags->intrinsic_riscv_vector_elen_flags;
-   riscv_zvl_flags = flags->intrinsic_riscv_zvl_flags;
-   riscv_zvb_subext = flags->intrinsic_riscv_zvb_subext;
-   riscv_zvk_subext = flags->intrinsic_riscv_zvk_subext;
- }
- 
  static int
  riscv_ext_version_value (unsigned major, unsigned minor)
  {
--- 34,39 ----
*************** riscv_pragma_intrinsic (cpp_reader *)
*** 281,300 ****
    if (strcmp (name, "vector") == 0
        || strcmp (name, "xtheadvector") == 0)
      {
-       struct pragma_intrinsic_flags backup_flags;
- 
-       riscv_pragma_intrinsic_flags_pollute (&backup_flags);
- 
-       riscv_option_override ();
-       init_adjust_machine_modes ();
-       riscv_vector::reinit_builtins ();
        riscv_vector::handle_pragma_vector ();
- 
-       riscv_pragma_intrinsic_flags_restore (&backup_flags);
- 
-       /* Re-initialize after the flags are restored.  */
-       riscv_option_override ();
-       init_adjust_machine_modes ();
      }
    else
      error ("unknown %<#pragma riscv intrinsic%> option %qs", name);
--- 210,216 ----
diff -Nrcpad gcc-15-20250927/gcc/config/riscv/riscv-v.cc gcc-15-20251004/gcc/config/riscv/riscv-v.cc
*** gcc-15-20250927/gcc/config/riscv/riscv-v.cc	Sat Sep 27 22:32:44 2025
--- gcc-15-20251004/gcc/config/riscv/riscv-v.cc	Sat Oct  4 22:32:39 2025
*************** expand_vec_perm (rtx target, rtx op0, rt
*** 3053,3067 ****
    mask_mode = get_mask_mode (data_mode);
    rtx mask = gen_reg_rtx (mask_mode);
    rtx max_sel = gen_const_vector_dup (sel_mode, nunits);
  
    /* Step 1: generate a mask that should select everything >= nunits into the
     * mask.  */
    expand_vec_cmp (mask, GEU, sel_mod, max_sel);
  
!   /* Step2: gather every op0 values indexed by sel into target,
  	    we don't need to care about the result of the element
  	    whose index >= nunits.  */
!   emit_vlmax_gather_insn (target, op0, sel_mod);
  
    /* Step3: shift the range from (nunits, max_of_mode] to
  	    [0, max_of_mode - nunits].  */
--- 3053,3069 ----
    mask_mode = get_mask_mode (data_mode);
    rtx mask = gen_reg_rtx (mask_mode);
    rtx max_sel = gen_const_vector_dup (sel_mode, nunits);
+   bool overlap = reg_overlap_mentioned_p (target, op1);
+   rtx tmp_target = overlap ? gen_reg_rtx (data_mode) : target;
  
    /* Step 1: generate a mask that should select everything >= nunits into the
     * mask.  */
    expand_vec_cmp (mask, GEU, sel_mod, max_sel);
  
!   /* Step2: gather every op0 values indexed by sel into TMP_TARGET,
  	    we don't need to care about the result of the element
  	    whose index >= nunits.  */
!   emit_vlmax_gather_insn (tmp_target, op0, sel_mod);
  
    /* Step3: shift the range from (nunits, max_of_mode] to
  	    [0, max_of_mode - nunits].  */
*************** expand_vec_perm (rtx target, rtx op0, rt
*** 3071,3077 ****
  
    /* Step4: gather those into the previously masked-out elements
  	    of target.  */
!   emit_vlmax_masked_gather_mu_insn (target, op1, tmp, mask);
  }
  
  /* Implement TARGET_VECTORIZE_VEC_PERM_CONST for RVV.  */
--- 3073,3082 ----
  
    /* Step4: gather those into the previously masked-out elements
  	    of target.  */
!   emit_vlmax_masked_gather_mu_insn (tmp_target, op1, tmp, mask);
! 
!   if (overlap)
!     emit_move_insn (target, tmp_target);
  }
  
  /* Implement TARGET_VECTORIZE_VEC_PERM_CONST for RVV.  */
diff -Nrcpad gcc-15-20250927/gcc/config/riscv/riscv-vector-builtins.cc gcc-15-20251004/gcc/config/riscv/riscv-vector-builtins.cc
*** gcc-15-20250927/gcc/config/riscv/riscv-vector-builtins.cc	Sat Sep 27 22:32:44 2025
--- gcc-15-20251004/gcc/config/riscv/riscv-vector-builtins.cc	Sat Oct  4 22:32:39 2025
*************** static hash_table<registered_function_ha
*** 3136,3141 ****
--- 3136,3193 ----
  static hash_table<non_overloaded_registered_function_hasher>
    *non_overloaded_function_table;
  
+ struct pragma_intrinsic_flags
+ {
+   int intrinsic_target_flags;
+ 
+   int intrinsic_riscv_vector_elen_flags;
+   int intrinsic_riscv_zvl_flags;
+ };
+ 
+ static void
+ riscv_pragma_intrinsic_flags_pollute (struct pragma_intrinsic_flags *flags)
+ {
+   /* We already defer the required extension checking to expantion time, so we
+      only need to pollute those flags that might affect the type registration.
+ 
+      e.g. zvfbmin and zvfhmin are required to define the vector bf16 and f16,
+ 	  and VECTOR_ELEN* also required for vector interger and floating
+ 	  type.  */
+   flags->intrinsic_target_flags = target_flags;
+   flags->intrinsic_riscv_vector_elen_flags = riscv_vector_elen_flags;
+   flags->intrinsic_riscv_zvl_flags = riscv_zvl_flags;
+ 
+   target_flags = target_flags
+     | MASK_VECTOR;
+ 
+   riscv_zvl_flags = riscv_zvl_flags
+     | MASK_ZVL32B
+     | MASK_ZVL64B
+     | MASK_ZVL128B
+     | MASK_ZVL256B
+     | MASK_ZVL512B
+     | MASK_ZVL1024B
+     | MASK_ZVL2048B
+     | MASK_ZVL4096B;
+ 
+   riscv_vector_elen_flags = riscv_vector_elen_flags
+     | MASK_VECTOR_ELEN_32
+     | MASK_VECTOR_ELEN_64
+     | MASK_VECTOR_ELEN_FP_16
+     | MASK_VECTOR_ELEN_BF_16
+     | MASK_VECTOR_ELEN_FP_32
+     | MASK_VECTOR_ELEN_FP_64;
+ }
+ 
+ static void
+ riscv_pragma_intrinsic_flags_restore (struct pragma_intrinsic_flags *flags)
+ {
+   target_flags = flags->intrinsic_target_flags;
+ 
+   riscv_vector_elen_flags = flags->intrinsic_riscv_vector_elen_flags;
+   riscv_zvl_flags = flags->intrinsic_riscv_zvl_flags;
+ }
+ 
  /* RAII class for enabling enough RVV features to define the built-in
     types and implement the riscv_vector.h pragma.
  
*************** static hash_table<non_overloaded_registe
*** 3148,3168 ****
  class rvv_switcher
  {
  public:
!   rvv_switcher ();
    ~rvv_switcher ();
  
  private:
    bool m_old_have_regs_of_mode[MAX_MACHINE_MODE];
  };
  
! rvv_switcher::rvv_switcher ()
  {
    /* Set have_regs_of_mode before targetm.init_builtins ().  */
    memcpy (m_old_have_regs_of_mode, have_regs_of_mode,
  	  sizeof (have_regs_of_mode));
    for (int i = 0; i < NUM_MACHINE_MODES; ++i)
      if (riscv_v_ext_vector_mode_p ((machine_mode) i))
        have_regs_of_mode[i] = true;
  }
  
  rvv_switcher::~rvv_switcher ()
--- 3200,3241 ----
  class rvv_switcher
  {
  public:
!   rvv_switcher (bool pollute_flags = true);
    ~rvv_switcher ();
  
  private:
    bool m_old_have_regs_of_mode[MAX_MACHINE_MODE];
+   struct pragma_intrinsic_flags backup_flags;
+   bool m_pollute_flags;
  };
  
! static void
! register_builtin_types_on_null ();
! 
! rvv_switcher::rvv_switcher (bool pollute_flags)
!   : m_pollute_flags (pollute_flags)
  {
+   if (m_pollute_flags)
+     {
+       riscv_pragma_intrinsic_flags_pollute (&backup_flags);
+       riscv_option_override ();
+     }
+ 
    /* Set have_regs_of_mode before targetm.init_builtins ().  */
    memcpy (m_old_have_regs_of_mode, have_regs_of_mode,
  	  sizeof (have_regs_of_mode));
    for (int i = 0; i < NUM_MACHINE_MODES; ++i)
      if (riscv_v_ext_vector_mode_p ((machine_mode) i))
        have_regs_of_mode[i] = true;
+ 
+   /* Not necessary to adjust mode and register type if we don't pollute
+      flags.  */
+   if (m_pollute_flags)
+     {
+       init_adjust_machine_modes ();
+ 
+       register_builtin_types_on_null ();
+     }
  }
  
  rvv_switcher::~rvv_switcher ()
*************** rvv_switcher::~rvv_switcher ()
*** 3170,3175 ****
--- 3243,3257 ----
    /* Recover back have_regs_of_mode.  */
    memcpy (have_regs_of_mode, m_old_have_regs_of_mode,
  	  sizeof (have_regs_of_mode));
+ 
+   if (m_pollute_flags)
+     {
+       riscv_pragma_intrinsic_flags_restore (&backup_flags);
+ 
+       /* Re-initialize after the flags are restored.  */
+       riscv_option_override ();
+       init_adjust_machine_modes ();
+     }
  }
  
  /* Add attribute NAME to ATTRS.  */
*************** register_tuple_type (vector_type_index t
*** 3326,3351 ****
  static void
  register_builtin_types ()
  {
!   /* Get type node from get_typenode_from_name to prevent we have different type
!      node define in different target libraries, e.g. int32_t defined as
!      `long` in RV32/newlib-stdint, but `int` for RV32/glibc-stdint.h.
!      NOTE: uint[16|32|64]_type_node already defined in tree.h.  */
!   tree int8_type_node = get_typenode_from_name (INT8_TYPE);
!   tree uint8_type_node = get_typenode_from_name (UINT8_TYPE);
!   tree int16_type_node = get_typenode_from_name (INT16_TYPE);
!   tree int32_type_node = get_typenode_from_name (INT32_TYPE);
!   tree int64_type_node = get_typenode_from_name (INT64_TYPE);
! 
!   machine_mode mode;
! #define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE,         \
! 		     ARGS...)                                                  \
!   mode = VECTOR_MODE##mode;                                                    \
!   register_builtin_type (VECTOR_TYPE_##NAME, SCALAR_TYPE##_type_node, mode);
! #define DEF_RVV_TUPLE_TYPE(NAME, NCHARS, ABI_NAME, SUBPART_TYPE, SCALAR_TYPE,  \
! 			   NF, VECTOR_SUFFIX)                                  \
!   register_tuple_type (VECTOR_TYPE_##NAME, VECTOR_TYPE_##SUBPART_TYPE,         \
! 		       SCALAR_TYPE##_type_node, NF);
! #include "riscv-vector-builtins.def"
  }
  
  /* Similar as register_builtin_types but perform the registration if and
--- 3408,3417 ----
  static void
  register_builtin_types ()
  {
!   /* Don't pollute flags at this stage to make sure we only register type with
!      what we want so far, we will register all type if necessary later.   */
!   rvv_switcher rvv (/* pollute_flags */ false);
!   register_builtin_types_on_null ();
  }
  
  /* Similar as register_builtin_types but perform the registration if and
*************** required_extensions_p (enum rvv_base_typ
*** 3457,3481 ****
    gcc_unreachable ();
  }
  
- static uint64_t
- get_required_extensions (vector_type_index type_idx)
- {
-   for (unsigned int i = 0; all_ops[i].index != NUM_VECTOR_TYPES; i++)
-     if (type_idx == all_ops[i].index)
-       return all_ops[i].required_extensions;
-   for (unsigned int i = 0; b_ops[i].index != NUM_VECTOR_TYPES; i++)
-     if (type_idx == b_ops[i].index)
-       return b_ops[i].required_extensions;
-   gcc_unreachable ();
- }
- 
  /* Check whether all the RVV_REQUIRE_* values in REQUIRED_EXTENSIONS are
!    enabled.  */
  static bool
  check_required_extensions (const function_instance &instance)
  {
    rvv_type_info type_info = instance.type;
-   uint64_t required_extensions = type_info.required_extensions;
    const rvv_op_info *op_info = instance.op_info;
  
    if (required_extensions_p (op_info->ret.base_type))
--- 3523,3537 ----
    gcc_unreachable ();
  }
  
  /* Check whether all the RVV_REQUIRE_* values in REQUIRED_EXTENSIONS are
!    enabled.
!    TODO: We defer the required extensions to expantion time, this function is
! 	 only doing the legality now, and we may rename this function and moving
! 	 to another layer.  */
  static bool
  check_required_extensions (const function_instance &instance)
  {
    rvv_type_info type_info = instance.type;
    const rvv_op_info *op_info = instance.op_info;
  
    if (required_extensions_p (op_info->ret.base_type))
*************** check_required_extensions (const functio
*** 3484,3531 ****
  	= op_info->ret.get_function_type_index (type_info.index);
        if (ret_type_idx == NUM_VECTOR_TYPES)
  	return false;
-       required_extensions |= get_required_extensions (ret_type_idx);
      }
  
    for (unsigned i = 0; op_info->args[i].base_type != NUM_BASE_TYPES; ++i)
      {
        if (!required_extensions_p (op_info->args[i].base_type))
  	continue;
- 
        enum vector_type_index vector_type
  	= op_info->args[i].get_function_type_index (type_info.index);
        if (vector_type == NUM_VECTOR_TYPES)
  	return false;
-       required_extensions |= get_required_extensions (vector_type);
- 
-       /* According to RVV ISA, EEW=64 index of indexed loads/stores require
- 	 XLEN = 64.  */
-       if (op_info->args[i].base_type == RVV_BASE_eew64_index)
- 	required_extensions |= RVV_REQUIRE_RV64BIT;
      }
  
-   uint64_t riscv_isa_flags = 0;
- 
-   if (TARGET_VECTOR_ELEN_BF_16)
-     riscv_isa_flags |= RVV_REQUIRE_ELEN_BF_16;
-   if (TARGET_VECTOR_ELEN_FP_16)
-     riscv_isa_flags |= RVV_REQUIRE_ELEN_FP_16;
-   if (TARGET_VECTOR_ELEN_FP_32)
-     riscv_isa_flags |= RVV_REQUIRE_ELEN_FP_32;
-   if (TARGET_VECTOR_ELEN_FP_64)
-     riscv_isa_flags |= RVV_REQUIRE_ELEN_FP_64;
-   if (TARGET_VECTOR_ELEN_64)
-     riscv_isa_flags |= RVV_REQUIRE_ELEN_64;
-   if (TARGET_64BIT)
-     riscv_isa_flags |= RVV_REQUIRE_RV64BIT;
-   if (TARGET_FULL_V)
-     riscv_isa_flags |= RVV_REQUIRE_FULL_V;
-   if (TARGET_MIN_VLEN > 32)
-     riscv_isa_flags |= RVV_REQUIRE_MIN_VLEN_64;
- 
-   uint64_t missing_extensions = required_extensions & ~riscv_isa_flags;
-   if (missing_extensions != 0)
-     return false;
    return true;
  }
  
--- 3540,3557 ----
*************** function_instance::get_return_type () co
*** 3688,3693 ****
--- 3714,3725 ----
    return op_info->ret.get_tree_type (type.index);
  }
  
+ bool
+ function_instance::function_returns_void_p () const
+ {
+   return get_return_type () == void_type_node;
+ }
+ 
  tree
  function_instance::get_arg_type (unsigned opno) const
  {
*************** function_builder::add_function (const fu
*** 3960,3966 ****
       nodes and remove the target hook. For now, however, we need to appease the
       validation and return a non-NULL, non-error_mark_node node, so we
       arbitrarily choose integer_zero_node.  */
!   tree decl = placeholder_p
  		? integer_zero_node
  		: simulate_builtin_function_decl (input_location, name, fntype,
  						  code, NULL, attrs);
--- 3992,3998 ----
       nodes and remove the target hook. For now, however, we need to appease the
       validation and return a non-NULL, non-error_mark_node node, so we
       arbitrarily choose integer_zero_node.  */
!   tree decl = placeholder_p || in_lto_p
  		? integer_zero_node
  		: simulate_builtin_function_decl (input_location, name, fntype,
  						  code, NULL, attrs);
*************** builtin_type_p (const_tree type)
*** 4695,4722 ****
  void
  init_builtins ()
  {
-   rvv_switcher rvv;
-   if (!TARGET_VECTOR)
-     return;
-   register_builtin_types ();
-   if (in_lto_p)
-     handle_pragma_vector ();
- }
- 
- /* Reinitialize builtins similar to init_builtins,  but only the null
-    builtin types will be registered.  */
- void
- reinit_builtins ()
- {
-   rvv_switcher rvv;
- 
-   if (!TARGET_VECTOR)
-     return;
- 
-   register_builtin_types_on_null ();
- 
    if (in_lto_p)
      handle_pragma_vector ();
  }
  
  /* Implement TARGET_VERIFY_TYPE_CONTEXT for RVV types.  */
--- 4727,4741 ----
  void
  init_builtins ()
  {
    if (in_lto_p)
+     /* "pragma vector" will register type during the process. */
      handle_pragma_vector ();
+   else
+     {
+       if (!TARGET_VECTOR)
+ 	return;
+       register_builtin_types ();
+     }
  }
  
  /* Implement TARGET_VERIFY_TYPE_CONTEXT for RVV types.  */
*************** handle_pragma_vector ()
*** 4882,4891 ****
    function_table = new hash_table<registered_function_hasher> (1023);
    function_builder builder;
    for (unsigned int i = 0; i < ARRAY_SIZE (function_groups); ++i)
!   {
!     if (function_groups[i].match (function_groups[i].required_extensions))
!       builder.register_function_group (function_groups[i]);
!   }
  }
  
  /* Return the function decl with RVV function subcode CODE, or error_mark_node
--- 4901,4907 ----
    function_table = new hash_table<registered_function_hasher> (1023);
    function_builder builder;
    for (unsigned int i = 0; i < ARRAY_SIZE (function_groups); ++i)
!     builder.register_function_group (function_groups[i]);
  }
  
  /* Return the function decl with RVV function subcode CODE, or error_mark_node
diff -Nrcpad gcc-15-20250927/gcc/config/riscv/riscv-vector-builtins.h gcc-15-20251004/gcc/config/riscv/riscv-vector-builtins.h
*** gcc-15-20250927/gcc/config/riscv/riscv-vector-builtins.h	Sat Sep 27 22:32:44 2025
--- gcc-15-20251004/gcc/config/riscv/riscv-vector-builtins.h	Sat Oct  4 22:32:39 2025
*************** public:
*** 407,412 ****
--- 407,413 ----
    bool any_type_float_p () const;
  
    tree get_return_type () const;
+   bool function_returns_void_p () const;
    tree get_arg_type (unsigned opno) const;
  
    /* The properties of the function.  (The explicit "enum"s are required
*************** class function_call_info : public functi
*** 462,469 ****
  public:
    function_call_info (location_t, const function_instance &, tree);
  
-   bool function_returns_void_p ();
- 
    /* The location of the call.  */
    location_t location;
  
--- 463,468 ----
*************** public:
*** 471,483 ****
    tree fndecl;
  };
  
- /* Return true if the function has no return value.  */
- inline bool
- function_call_info::function_returns_void_p ()
- {
-   return TREE_TYPE (TREE_TYPE (fndecl)) == void_type_node;
- }
- 
  /* A class for folding a gimple function call.  */
  class gimple_folder : public function_call_info
  {
--- 470,475 ----
diff -Nrcpad gcc-15-20250927/gcc/fortran/ChangeLog gcc-15-20251004/gcc/fortran/ChangeLog
*** gcc-15-20250927/gcc/fortran/ChangeLog	Sat Sep 27 22:32:44 2025
--- gcc-15-20251004/gcc/fortran/ChangeLog	Sat Oct  4 22:32:41 2025
***************
*** 1,3 ****
--- 1,31 ----
+ 2025-09-28  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-09-11  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121616
+ 	* primary.cc (gfc_variable_attr): Properly set dimension attribute
+ 	from a component ref.
+ 
+ 2025-09-28  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-09-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121939
+ 	* trans-types.cc (gfc_init_types): Set string flag for all
+ 	character types.
+ 
+ 2025-09-28  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-09-21  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/108581
+ 	* trans-array.cc (gfc_conv_expr_descriptor): Take the dynamic
+ 	string length into account when deriving the dataptr offset for
+ 	a deferred-length character array.
+ 
  2025-09-23  Paul Thomas  <pault@gcc.gnu.org>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250927/gcc/fortran/primary.cc gcc-15-20251004/gcc/fortran/primary.cc
*** gcc-15-20250927/gcc/fortran/primary.cc	Sat Sep 27 22:32:44 2025
--- gcc-15-20251004/gcc/fortran/primary.cc	Sat Oct  4 22:32:41 2025
*************** gfc_variable_attr (gfc_expr *expr, gfc_t
*** 3057,3068 ****
--- 3057,3070 ----
  
  	if (comp->ts.type == BT_CLASS)
  	  {
+ 	    dimension = CLASS_DATA (comp)->attr.dimension;
  	    codimension = CLASS_DATA (comp)->attr.codimension;
  	    pointer = CLASS_DATA (comp)->attr.class_pointer;
  	    allocatable = CLASS_DATA (comp)->attr.allocatable;
  	  }
  	else
  	  {
+ 	    dimension = comp->attr.dimension;
  	    codimension = comp->attr.codimension;
  	    if (expr->ts.type == BT_CLASS && strcmp (comp->name, "_data") == 0)
  	      pointer = comp->attr.class_pointer;
diff -Nrcpad gcc-15-20250927/gcc/fortran/trans-array.cc gcc-15-20251004/gcc/fortran/trans-array.cc
*** gcc-15-20250927/gcc/fortran/trans-array.cc	Sat Sep 27 22:32:44 2025
--- gcc-15-20251004/gcc/fortran/trans-array.cc	Sat Oct  4 22:32:41 2025
*************** gfc_conv_expr_descriptor (gfc_se *se, gf
*** 8682,8687 ****
--- 8682,8700 ----
  					  gfc_rank_cst[dim], stride);
  	}
  
+       /* For deferred-length character we need to take the dynamic length
+ 	 into account for the dataptr offset.  */
+       if (expr->ts.type == BT_CHARACTER
+ 	  && expr->ts.deferred
+ 	  && expr->ts.u.cl->backend_decl
+ 	  && VAR_P (expr->ts.u.cl->backend_decl))
+ 	{
+ 	  tree base_type = TREE_TYPE (base);
+ 	  base = fold_build2_loc (input_location, MULT_EXPR, base_type, base,
+ 				  fold_convert (base_type,
+ 						expr->ts.u.cl->backend_decl));
+ 	}
+ 
        for (n = loop.dimen; n < loop.dimen + codim; n++)
  	{
  	  from = loop.from[n];
diff -Nrcpad gcc-15-20250927/gcc/fortran/trans-types.cc gcc-15-20251004/gcc/fortran/trans-types.cc
*** gcc-15-20250927/gcc/fortran/trans-types.cc	Sat Sep 27 22:32:44 2025
--- gcc-15-20251004/gcc/fortran/trans-types.cc	Sat Oct  4 22:32:42 2025
*************** gfc_init_types (void)
*** 1132,1137 ****
--- 1132,1138 ----
      {
        type = gfc_build_uint_type (gfc_character_kinds[index].bit_size);
        type = build_qualified_type (type, TYPE_UNQUALIFIED);
+       TYPE_STRING_FLAG (type) = 1;
        snprintf (name_buf, sizeof(name_buf), "character(kind=%d)",
  		gfc_character_kinds[index].kind);
        PUSH_TYPE (name_buf, type);
diff -Nrcpad gcc-15-20250927/gcc/testsuite/ChangeLog gcc-15-20251004/gcc/testsuite/ChangeLog
*** gcc-15-20250927/gcc/testsuite/ChangeLog	Sat Sep 27 22:32:46 2025
--- gcc-15-20251004/gcc/testsuite/ChangeLog	Sat Oct  4 22:32:44 2025
***************
*** 1,3 ****
--- 1,32 ----
+ 2025-09-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/reduce1.adb: New test.
+ 
+ 2025-09-28  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-09-11  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121616
+ 	* gfortran.dg/alloc_comp_assign_17.f90: New test.
+ 
+ 2025-09-28  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-09-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/121939
+ 	* gfortran.dg/deferred_character_39.f90: Disable temporary
+ 	workaround for character(kind=4) deferred-length bug.
+ 
+ 2025-09-28  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-09-21  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/108581
+ 	* gfortran.dg/deferred_character_39.f90: New test.
+ 
  2025-09-26  Lulu Cheng  <chenglulu@loongson.cn>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250927/gcc/testsuite/gcc.target/riscv/lto/pr110812_0.c gcc-15-20251004/gcc/testsuite/gcc.target/riscv/lto/pr110812_0.c
*** gcc-15-20250927/gcc/testsuite/gcc.target/riscv/lto/pr110812_0.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20251004/gcc/testsuite/gcc.target/riscv/lto/pr110812_0.c	Sat Oct  4 22:33:43 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-lto-do link } */
+ /* { dg-lto-options { { -flto -march=rv64gc -mabi=lp64d } } } */
+ /* { dg-extra-ld-options "-nostdlib" } */
+ 
+ void foo();
+ 
+ int _start(){
+     foo();
+ }
diff -Nrcpad gcc-15-20250927/gcc/testsuite/gcc.target/riscv/lto/pr110812_1.c gcc-15-20251004/gcc/testsuite/gcc.target/riscv/lto/pr110812_1.c
*** gcc-15-20250927/gcc/testsuite/gcc.target/riscv/lto/pr110812_1.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20251004/gcc/testsuite/gcc.target/riscv/lto/pr110812_1.c	Sat Oct  4 22:33:43 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-options { -flto -march=rv64gcv -mabi=lp64d } } */
+ 
+ #include "riscv_vector.h"
+ uint8_t *x, *y;
+ void foo () {
+    int vl = __riscv_vsetvl_e8m8 (100);
+    vint8m8_t a = __riscv_vle8_v_i8m8 (x, 100);
+    __riscv_vse8_v_i8m8 (y, a, 100);
+ }
diff -Nrcpad gcc-15-20250927/gcc/testsuite/gcc.target/riscv/lto/riscv-lto.exp gcc-15-20251004/gcc/testsuite/gcc.target/riscv/lto/riscv-lto.exp
*** gcc-15-20250927/gcc/testsuite/gcc.target/riscv/lto/riscv-lto.exp	Thu Jan  1 00:00:00 1970
--- gcc-15-20251004/gcc/testsuite/gcc.target/riscv/lto/riscv-lto.exp	Sat Oct  4 22:33:43 2025
***************
*** 0 ****
--- 1,61 ----
+ # Copyright (C) 2025 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with GCC; see the file COPYING3.  If not see
+ # <http://www.gnu.org/licenses/>.
+ 
+ # Exit immediately if this isn't an RISC-V target.
+ if ![istarget riscv*-*-*] then {
+   return
+ }
+ 
+ # Test link-time optimization across multiple files.
+ #
+ # Programs are broken into multiple files.  Each one is compiled
+ # separately with LTO information.  The final executable is generated
+ # by collecting all the generated object files using regular LTO or WHOPR.
+ 
+ if $tracelevel then {
+     strace $tracelevel
+ }
+ 
+ # Load procedures from common libraries.
+ load_lib standard.exp
+ load_lib gcc.exp
+ 
+ # Load the language-independent compabibility support procedures.
+ load_lib lto.exp
+ 
+ # If LTO has not been enabled, bail.
+ if { ![check_effective_target_lto] } {
+     return
+ }
+ 
+ gcc_init
+ lto_init no-mathlib
+ 
+ # Define an identifier for use with this suite to avoid name conflicts
+ # with other lto tests running at the same time.
+ set sid "c_lto"
+ 
+ # Main loop.
+ foreach src [lsort [find $srcdir/$subdir *_0.c]] {
+     # If we're only testing specific files and this isn't one of them, skip it.
+     if ![runtest_file_p $runtests $src] then {
+ 	continue
+     }
+ 
+     lto-execute $src $sid
+ }
+ 
+ lto_finish
diff -Nrcpad gcc-15-20250927/gcc/testsuite/gcc.target/riscv/lto/riscv_vector.h gcc-15-20251004/gcc/testsuite/gcc.target/riscv/lto/riscv_vector.h
*** gcc-15-20250927/gcc/testsuite/gcc.target/riscv/lto/riscv_vector.h	Thu Jan  1 00:00:00 1970
--- gcc-15-20251004/gcc/testsuite/gcc.target/riscv/lto/riscv_vector.h	Sat Oct  4 22:33:43 2025
***************
*** 0 ****
--- 1,11 ----
+ /* Wrapper of riscv_vector.h, prevent riscv_vector.h including stdint.h from
+    C library, that might cause problem on testing RV32 related testcase when
+    we disable multilib.  */
+ #ifndef _RISCV_VECTOR_WRAP_H
+ 
+ #define _GCC_WRAP_STDINT_H
+ #include "stdint-gcc.h"
+ #include_next <riscv_vector.h>
+ #define _RISCV_VECTOR_WRAP_H
+ 
+ #endif
diff -Nrcpad gcc-15-20250927/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121742.c gcc-15-20251004/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121742.c
*** gcc-15-20250927/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121742.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20251004/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121742.c	Sat Oct  4 22:33:43 2025
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -O2" } */
+ 
+ typedef unsigned long uint64_t;
+ typedef unsigned int uint32_t;
+ typedef unsigned char uint8_t;
+ typedef uint8_t a __attribute__((vector_size(4)));
+ int b, c;
+ 
+ uint64_t d() {
+   a e = {5, 9, 1, 5};
+   a bla = {0, 0, 0, 0};
+   int *f = &b;
+   uint32_t g = 0;
+   int i = 0;
+   for (; i < 2; i++)
+     for (c = 0; c <= 2; c++) {
+       *f ^= e[3] + 9;
+       e = __builtin_shufflevector(
+           ~__builtin_shufflevector(bla, e, 1, 4, 3, 4), e, 0, 1, 1, 7);
+     }
+   return g;
+ }
+ 
+ int main() {
+   int j = d ();
+   if (b != 0)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-15-20250927/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121780.c gcc-15-20251004/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121780.c
*** gcc-15-20250927/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121780.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20251004/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121780.c	Sat Oct  4 22:33:43 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -O1 -Wno-overflow" } */
+ 
+ typedef char int8_t;
+ typedef unsigned char uint8_t;
+ typedef short int16_t;
+ typedef int int32_t;
+ typedef unsigned int uint32_t;
+ typedef long int64_t;
+ typedef unsigned long uint64_t;
+ 
+ typedef uint8_t a;
+ typedef a b __attribute__((vector_size(4)));
+ typedef a c __attribute__((vector_size(8)));
+ int d[10];
+ struct {
+   int16_t e;
+ } f;
+ int64_t g;
+ int32_t j(int32_t, int32_t, int8_t, uint8_t, int64_t) {
+   c k = {20927, 0, 9, 6, 6, 2};
+   int *l = &d[1];
+   for (;;) {
+     asm goto("" : : : : m);
+     k = __builtin_shufflevector(
+         __builtin_shufflevector(k, k, 3, 1, 1, 9, 4, 5, 9, 0),
+         __builtin_shufflevector((b){}, (b){}, 1, 3, 7, 6, 0, 0, 6, 2), 10, 2, 1,
+         7, 7, 7, 4, 5);
+     for (; f.e >= 0;) {
+       *l = k[7];
+       uint32_t n[][7][6] = {};
+       return n[0][5][0];
+     m:
+     }
+   }
+ }
+ 
+ int main() {
+   uint64_t o = 1;
+   j(o, g, g, o, 0);
+   int BS_CHECKSUM = 5;
+   for (int i = 0; i < 10; i++)
+     BS_CHECKSUM ^= d[i];
+   if (BS_CHECKSUM != 7)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-15-20250927/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121781.c gcc-15-20251004/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121781.c
*** gcc-15-20250927/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121781.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20251004/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121781.c	Sat Oct  4 22:33:43 2025
***************
*** 0 ****
--- 1,53 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -O1" } */
+ 
+ typedef unsigned char uint8_t;
+ typedef short int16_t;
+ typedef unsigned short uint16_t;
+ typedef int int32_t;
+ typedef unsigned int uint32_t;
+ typedef unsigned long uint64_t;
+ 
+ typedef int16_t a;
+ typedef uint16_t b;
+ typedef b c __attribute__((vector_size(8)));
+ typedef a d __attribute__((vector_size(8)));
+ typedef b e __attribute__((vector_size(16)));
+ int f[10];
+ uint16_t g, l, k;
+ int32_t j;
+ int32_t m(uint32_t, const uint32_t *);
+ int32_t *n(uint64_t, uint8_t);
+ uint8_t o() {
+   int p = 7;
+   m(p, 0);
+   return 0;
+ }
+ int32_t m(uint32_t, const uint32_t *) {
+   int32_t q = l;
+   n(q, 0);
+   return k;
+ }
+ int32_t *n(uint64_t, uint8_t) {
+   c r = {1, 6, 8, 30};
+   d s = {};
+   e u;
+   int *t = &f[7];
+   for (j = 9; j; j--) {
+     *t ^= s[0];
+     r = __builtin_shufflevector(r * r, r, 2, 5, 7, 2);
+     for (g = 0; g != 1; g = g + 3)
+       s = (d)__builtin_shufflevector(
+           __builtin_shufflevector(u, (e){}, 3, 1, 1, 1), r, 4, 6, 0, 2);
+   }
+   return &j;
+ }
+ int main() {
+   o();
+   int BS_CHECKSUM = 5;
+   for (int i = 0; i < 10; i++)
+     BS_CHECKSUM ^= f[i];
+   if (BS_CHECKSUM != 0xffffffffffffced1ull)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-15-20250927/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90 gcc-15-20251004/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90
*** gcc-15-20250927/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20251004/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90	Sat Oct  4 22:33:49 2025
***************
*** 0 ****
--- 1,96 ----
+ ! { dg-do run }
+ ! PR fortran/121616
+ !
+ ! Test fix for intrinsic assignment to allocatable scalar polymorphic component
+ 
+ program p
+   call pr121616 ()
+   call test_ts  ()
+ end
+ 
+ ! Derived from original PR (contributed by Jean Vézina)
+ subroutine pr121616 ()
+   implicit none
+   integer :: i
+   type general
+      class(*), allocatable :: x
+   end type general
+   type(general) :: a(4), b(4)
+   ! Intrinsic assignment to a variable of unlimited polymorphic type
+   a(1)%x = 1
+   a(2)%x = 3.14
+   a(3)%x = .true.
+   a(4)%x = 'abc'
+   ! The workaround was to use a structure constructor
+   b(1) = general(1)
+   b(2) = general(3.14)
+   b(3) = general(.true.)
+   b(4) = general('abc') 
+   do i = 1, 4
+      if (.not. allocated (a(i)%x)) stop 10+i
+      if (.not. allocated (b(i)%x)) stop 20+i
+      call prt (a(i)%x, b(i)%x)
+   end do
+   do i = 1, 4
+      deallocate (a(i)%x, b(i)%x)
+   end do
+ contains
+   subroutine prt (x, y)
+     class(*), intent(in) :: x, y
+     select type (v=>x)
+     type is (integer)
+        print *,v
+     type is (real)
+        print *,v
+     type is (logical)
+        print *,v
+     type is (character(*))
+        print *,v
+     class default
+        error stop 99
+     end select
+     if (.not. same_type_as (x, y)) stop 30+i
+   end subroutine prt
+ end
+ 
+ ! Contributed by a friend (private communication)
+ subroutine test_ts ()
+   implicit none
+ 
+   type :: t_inner
+     integer :: i
+   end type
+ 
+   type :: t_outer
+     class(t_inner), allocatable :: inner
+   end type
+ 
+   class(t_inner), allocatable :: inner
+   type(t_outer),  allocatable :: outer(:)
+   integer :: i
+ 
+   allocate(t_inner :: inner)
+   inner% i = 0
+ 
+   !------------------------------------------------
+   ! Size of outer must be > 1 for the bug to appear
+   !------------------------------------------------
+   allocate(outer(2))
+ 
+   !------------------------------
+   ! Loop is necessary for the bug
+   !------------------------------
+   do i = 1, size(outer)
+     write(*,*) i
+     !----------------------------------------------------
+     ! Expect intrinsic assignment to polymorphic variable
+     !----------------------------------------------------
+     outer(i)% inner = inner
+     deallocate (outer(i)% inner)
+   end do
+ 
+   write(*,*) 'Loop DONE'
+   deallocate(outer)
+   deallocate(inner)
+   write(*,*) 'Dellocation DONE'
+ end
diff -Nrcpad gcc-15-20250927/gcc/testsuite/gfortran.dg/deferred_character_39.f90 gcc-15-20251004/gcc/testsuite/gfortran.dg/deferred_character_39.f90
*** gcc-15-20250927/gcc/testsuite/gfortran.dg/deferred_character_39.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20251004/gcc/testsuite/gfortran.dg/deferred_character_39.f90	Sat Oct  4 22:33:55 2025
***************
*** 0 ****
--- 1,241 ----
+ ! { dg-do run }
+ ! PR fortran/108581 - issues with rank-2 deferred-length character arrays
+ ! PR fortran/121939 - ICE in gfc_conv_string_parameter
+ 
+ program p
+   call pr108581
+   call test2
+ end
+ 
+ ! Derived from original testcase
+ subroutine pr108581
+   integer, parameter :: xmin = 0, xmax = 0
+   integer, parameter :: ymin = 0, ymax = 1
+   integer, parameter :: l = 2
+   integer            :: x, y
+   character(8)       :: line1, line2, line3
+   character(*),   parameter :: expect(ymin:ymax) = ['A.','B*']
+   character(len=:), pointer :: a(:,:) => NULL()
+ 
+   allocate (character(len=l) :: a(xmin:xmax, ymin:ymax))
+   a(xmin:xmax, ymin) = expect(ymin)
+   a(xmin:xmax, ymax) = expect(ymax)
+ 
+   do y = ymin, ymax
+      write(line1,'(4A)') (a(x, y), x = xmin, xmax)
+      write(line2,'(4A)')  a(xmin:xmax, y)
+      write(line3,'(4A)')  a(    :    , y)
+      if (line1 /= expect(y) .or. &
+          line2 /= expect(y) .or. &
+          line3 /= expect(y)      ) then
+         write(*,*) (a(x, y), x = xmin, xmax)
+         write(*,*)  a(xmin:xmax, y)
+         write(*,*)  a(    :    , y)
+         stop 1 + y
+      end if
+   enddo
+   call chk (a)
+   deallocate (a)
+ contains
+   subroutine chk (z)
+     character(len=:), pointer :: z(:,:)
+     integer :: y
+     do y = lbound(z,2), ubound (z,2)
+        write(line2,'(4A)')  z(xmin:xmax, y)
+        write(line3,'(4A)')  z(    :    , y)
+        if (line2 /= expect(y) .or. &
+            line3 /= expect(y)      ) then
+           write(*,*) z(xmin:xmax, y)
+           write(*,*) z(    :    , y)
+           stop 5 + y
+        end if
+     enddo
+   end subroutine chk
+ end
+ 
+ ! Exercise character kinds, strides, ...
+ subroutine test2
+   implicit none
+   integer, parameter :: l = 3
+   integer            :: i
+ 
+   character(len=l,kind=1), parameter :: str1(*) = &
+        [   "123",   "456",   "789",   "0AB" ]
+   character(len=l,kind=4), parameter :: str4(*) = &
+        [ 4_"123", 4_"456", 4_"789", 4_"0AB" ]
+ 
+   character(len=l,kind=1), parameter :: str2(*,*) = &
+        reshape ([(str1(i),str1(5-i),i=1,4)], shape=[2,4])
+   character(len=l,kind=4), parameter :: str5(*,*) = &
+        reshape ([(str4(i),str4(5-i),i=1,4)], shape=[2,4])
+ 
+   character(len=l,kind=1), pointer :: a(:,:) => NULL(), e(:,:) => NULL()
+   character(len=:,kind=1), pointer :: b(:,:) => NULL(), f(:,:) => NULL()
+   character(len=l,kind=4), pointer :: c(:,:) => NULL(), g(:,:) => NULL()
+   character(len=:,kind=4), pointer :: d(:,:) => NULL(), h(:,:) => NULL()
+ 
+   character(len=16) :: s0, s1, s2, s3, s4
+ 
+   ! Simple case: shape=[1,4]
+   allocate (a, source = reshape (str1,[1,size(str1)]))
+   allocate (b, source = reshape (str1,[1,size(str1)]))
+   allocate (c, source = reshape (str4,[1,size(str4)]))
+   allocate (d, source = c)      ! fixed with pr121939
+ ! d => c
+   ! Positive non-unit stride
+   s0 = concat (str1(1::2))
+   write(s1,'(4A)') a(1,1::2)
+   write(s2,'(4A)') b(1,1::2)
+   write(s3,'(4A)') c(1,1::2)
+   write(s4,'(4A)') d(1,1::2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 11
+   if (s2 /= s0) stop 12
+   if (s3 /= s0) stop 13
+   if (s4 /= s0) stop 14
+   s0 = concat (str1(2::2))
+   write(s1,'(4A)') a(1,2::2)
+   write(s2,'(4A)') b(1,2::2)
+   write(s3,'(4A)') c(1,2::2)
+   write(s4,'(4A)') d(1,2::2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 15
+   if (s2 /= s0) stop 16
+   if (s3 /= s0) stop 17
+   if (s4 /= s0) stop 18
+ 
+   ! Negative non-unit stride
+   s0 = concat (str1(3:1:-2))
+   write(s1,'(4A)') a(1,3:1:-2)
+   write(s2,'(4A)') b(1,3:1:-2)
+   write(s3,'(4A)') c(1,3:1:-2)
+   write(s4,'(4A)') d(1,3:1:-2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 21
+   if (s2 /= s0) stop 22
+   if (s3 /= s0) stop 23
+   if (s4 /= s0) stop 24
+   s0 = concat (str1(4:1:-2))
+   write(s1,'(4A)') a(1,4:1:-2)
+   write(s2,'(4A)') b(1,4:1:-2)
+   write(s3,'(4A)') c(1,4:1:-2)
+   write(s4,'(4A)') d(1,4:1:-2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 25
+   if (s2 /= s0) stop 26
+   if (s3 /= s0) stop 27
+   if (s4 /= s0) stop 28
+   deallocate (a,b,c,d)
+ 
+   ! More complex cases with shape=[2,4]
+   allocate (e, source = reshape (str2,[2,size(str2,2)]))
+   allocate (f, source = reshape (str2,[2,size(str2,2)]))
+   allocate (g, source = reshape (str5,[2,size(str5,2)]))
+   allocate (h, source = reshape (str5,[2,size(str5,2)])) ! fixed with pr121939
+ ! h => g
+   s0 = concat (str2(1,3:1:-2))
+   write(s1,'(4A)') e(1,3:1:-2)
+   write(s2,'(4A)') f(1,3:1:-2)
+   write(s3,'(4A)') g(1,3:1:-2)
+   write(s4,'(4A)') h(1,3:1:-2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 31
+   if (s2 /= s0) stop 32
+   if (s3 /= s0) stop 33
+   if (s4 /= s0) stop 34
+   s0 = concat (str2(1,4:1:-2))
+   write(s1,'(4A)') e(1,4:1:-2)
+   write(s2,'(4A)') f(1,4:1:-2)
+   write(s3,'(4A)') g(1,4:1:-2)
+   write(s4,'(4A)') h(1,4:1:-2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 35
+   if (s2 /= s0) stop 36
+   if (s3 /= s0) stop 37
+   if (s4 /= s0) stop 38
+ 
+   s0 = concat (str2(2,3:1:-2))
+   write(s1,'(4A)') e(2,3:1:-2)
+   write(s2,'(4A)') f(2,3:1:-2)
+   write(s3,'(4A)') g(2,3:1:-2)
+   write(s4,'(4A)') h(2,3:1:-2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 41
+   if (s2 /= s0) stop 42
+   if (s3 /= s0) stop 43
+   if (s4 /= s0) stop 44
+   s0 = concat (str2(2,4:1:-2))
+   write(s1,'(4A)') e(2,4:1:-2)
+   write(s2,'(4A)') f(2,4:1:-2)
+   write(s3,'(4A)') g(2,4:1:-2)
+   write(s4,'(4A)') h(2,4:1:-2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 45
+   if (s2 /= s0) stop 46
+   if (s3 /= s0) stop 47
+   if (s4 /= s0) stop 48
+ 
+   ! Check pointer association with negative stride
+   a => e(2:1:-1,4:1:-1)
+   b => f(2:1:-1,4:1:-1)
+   c => g(2:1:-1,4:1:-1)
+   d => h(2:1:-1,4:1:-1)
+ 
+   s0 = concat (str2(2,4:1:-2))
+   write(s1,'(4A)') a(1,1::2)
+   write(s2,'(4A)') b(1,1::2)
+   write(s3,'(4A)') c(1,1::2)
+   write(s4,'(4A)') d(1,1::2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 51
+   if (s2 /= s0) stop 52
+   if (s3 /= s0) stop 53
+   if (s4 /= s0) stop 54
+   s0 = concat (str2(2,3:1:-2))
+   write(s1,'(4A)') a(1,2::2)
+   write(s2,'(4A)') b(1,2::2)
+   write(s3,'(4A)') c(1,2::2)
+   write(s4,'(4A)') d(1,2::2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 55
+   if (s2 /= s0) stop 56
+   if (s3 /= s0) stop 57
+   if (s4 /= s0) stop 58
+ 
+   s0 = concat (str2(1,4:1:-2))
+   write(s1,'(4A)') a(2,1::2)
+   write(s2,'(4A)') b(2,1::2)
+   write(s3,'(4A)') c(2,1::2)
+   write(s4,'(4A)') d(2,1::2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 61
+   if (s2 /= s0) stop 62
+   if (s3 /= s0) stop 63
+   if (s4 /= s0) stop 64
+   s0 = concat (str2(1,3:1:-2))
+   write(s1,'(4A)') a(2,2::2)
+   write(s2,'(4A)') b(2,2::2)
+   write(s3,'(4A)') c(2,2::2)
+   write(s4,'(4A)') d(2,2::2)
+ ! print *, s0, s1, s2, s3, s4
+   if (s1 /= s0) stop 65
+   if (s2 /= s0) stop 66
+   if (s3 /= s0) stop 67
+   if (s4 /= s0) stop 68
+   deallocate (e,f,g,h)
+ 
+ contains
+ 
+   ! Helper function to concatenate string array to scalar string
+   function concat (s)
+     character(len=:), allocatable :: concat
+     character(len=*), intent(in)  :: s(:)
+     integer :: i, l, n
+     n = size (s)
+     l = len  (s)
+     allocate (character(len=l*n) :: concat)
+     do i = 1, n
+        concat(1+(i-1)*l:i*l) = s(i)
+     end do
+   end function concat
+ end
diff -Nrcpad gcc-15-20250927/gcc/testsuite/gnat.dg/reduce1.adb gcc-15-20251004/gcc/testsuite/gnat.dg/reduce1.adb
*** gcc-15-20250927/gcc/testsuite/gnat.dg/reduce1.adb	Thu Jan  1 00:00:00 1970
--- gcc-15-20251004/gcc/testsuite/gnat.dg/reduce1.adb	Sat Oct  4 22:34:02 2025
***************
*** 0 ****
--- 1,14 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ procedure Reduce1 is
+ 
+   type Arr is array (Positive range <>) of Positive;
+ 
+   A: Arr := (2, 87);
+ 
+   B: Positive := A'Reduce (1, Positive'Max); -- { dg-error "no suitable" }
+ 
+ begin
+   null;
+ end;
