diff -Nrcpad gcc-14-20260410/LAST_UPDATED gcc-14-20260417/LAST_UPDATED
*** gcc-14-20260410/LAST_UPDATED	Fri Apr 10 22:32:19 2026
--- gcc-14-20260417/LAST_UPDATED	Fri Apr 17 22:32:20 2026
***************
*** 1 ****
! Obtained from git: releases/gcc-14 revision ca70418b81fc739834fb78f96fcaecd305dcc1db
--- 1 ----
! Obtained from git: releases/gcc-14 revision d59119c774ce73cc8634db12ff6f26c2e5056030
diff -Nrcpad gcc-14-20260410/MD5SUMS gcc-14-20260417/MD5SUMS
*** gcc-14-20260410/MD5SUMS	Fri Apr 10 22:32:24 2026
--- gcc-14-20260417/MD5SUMS	Fri Apr 17 22:32:25 2026
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-14-20260410.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-14-20260417.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
*************** fc9280b02bc68e4fb1ef8d51ccc25061  Change
*** 23,29 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! eaef2f42e646b372cc2ff1c4533b8f37  LAST_UPDATED
  1671040823f8eb8436a06fdd18065e02  MAINTAINERS
  304c3887135aefa27c21292ec585b0a3  Makefile.def
  8dd93fbf2e32bcbd2faba10e3b8ba2b0  Makefile.in
--- 23,29 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! ee2827c7650c644925f519f99ad2faf6  LAST_UPDATED
  1671040823f8eb8436a06fdd18065e02  MAINTAINERS
  304c3887135aefa27c21292ec585b0a3  Makefile.def
  8dd93fbf2e32bcbd2faba10e3b8ba2b0  Makefile.in
*************** bc7394806417778d77541ba1ec0e4a70  gcc/BA
*** 505,511 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 17516b1e7483d1a4f8759e81828d3c30  gcc/ChangeLog
  a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
  d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
  240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
--- 505,511 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 877ffbc60494c5bff2eb6fecab28a92f  gcc/ChangeLog
  a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
  d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
  240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 541,547 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! bf346b63683c207c5f27a8149c0cfa22  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
--- 541,547 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 87a332f5219b464afe553b93cafa5716  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** ec6799501b2eb2923d5de6a66169dbd2  gcc/ON
*** 553,559 ****
  4ff8b6b00464fd6c37969f80145dca46  gcc/acinclude.m4
  496cb89e62ed3dbfd1af1db0975a4c04  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! a448c081e48e3217d537d887ac05d889  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
--- 553,559 ----
  4ff8b6b00464fd6c37969f80145dca46  gcc/acinclude.m4
  496cb89e62ed3dbfd1af1db0975a4c04  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! c9b9c13c40bdfb1fbc66cc11f6e594e8  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
*************** d7e80ed6dc120d292c92120a7d566b74  gcc/ad
*** 589,595 ****
  dacffa0d5abeed22123335e3f6b8e61f  gcc/ada/adabkend.ads
  0ae00ad41c876f51ffa36e7e0c47f014  gcc/ada/adadecode.c
  0393ceca2b2879e7848e5b1cf7ad3016  gcc/ada/adadecode.h
! a437dcd18577a150213a4cb353eb578b  gcc/ada/adaint.c
  8ed92ebba3a19283274f9d3a536e9b7f  gcc/ada/adaint.h
  53e1b8b954d1909dd54d42f601b58306  gcc/ada/affinity.c
  23b2f7a3d261df5e4175f459ac3b7fc5  gcc/ada/ali-util.adb
--- 589,595 ----
  dacffa0d5abeed22123335e3f6b8e61f  gcc/ada/adabkend.ads
  0ae00ad41c876f51ffa36e7e0c47f014  gcc/ada/adadecode.c
  0393ceca2b2879e7848e5b1cf7ad3016  gcc/ada/adadecode.h
! 86aa6c5a7a2ab64d032f02448359063b  gcc/ada/adaint.c
  8ed92ebba3a19283274f9d3a536e9b7f  gcc/ada/adaint.h
  53e1b8b954d1909dd54d42f601b58306  gcc/ada/affinity.c
  23b2f7a3d261df5e4175f459ac3b7fc5  gcc/ada/ali-util.adb
*************** f805d118929dd79f6bd4dc75c77c968b  gcc/co
*** 3543,3549 ****
  f68c4ef34df906d99e11d3cda55c8375  gcc/config/arm/arm-tune.md
  718f4f1564d9199b9553b77b6f25bbe4  gcc/config/arm/arm.cc
  d627c9b9062533642a559523336390dc  gcc/config/arm/arm.h
! cacbb60deff2d37bf8d70ad3f494353e  gcc/config/arm/arm.md
  aafba6eef2fa39161c820beb71e74b41  gcc/config/arm/arm.opt
  d96083967a30e6eb0f75d624af2d831a  gcc/config/arm/arm.opt.urls
  6fdbac79ee439703b0df3733036e4839  gcc/config/arm/arm1020e.md
--- 3543,3549 ----
  f68c4ef34df906d99e11d3cda55c8375  gcc/config/arm/arm-tune.md
  718f4f1564d9199b9553b77b6f25bbe4  gcc/config/arm/arm.cc
  d627c9b9062533642a559523336390dc  gcc/config/arm/arm.h
! c70d9422307efae4f75fd6d14a67f113  gcc/config/arm/arm.md
  aafba6eef2fa39161c820beb71e74b41  gcc/config/arm/arm.opt
  d96083967a30e6eb0f75d624af2d831a  gcc/config/arm/arm.opt.urls
  6fdbac79ee439703b0df3733036e4839  gcc/config/arm/arm1020e.md
*************** dce7dac7e905ada28c6563d930b531eb  gcc/fo
*** 5874,5880 ****
  b954a317257afa3149e46a5bce58d9c2  gcc/fold-const.cc
  62f9c541bc34eb653f289ecd29c7848a  gcc/fold-const.h
  5cce8057cb6a40c0ce23fcd6497d35c0  gcc/fold-mem-offsets.cc
! 9eb5e758181e4501327ba8d7343a15c6  gcc/fortran/ChangeLog
  3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
  d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
  bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
--- 5874,5880 ----
  b954a317257afa3149e46a5bce58d9c2  gcc/fold-const.cc
  62f9c541bc34eb653f289ecd29c7848a  gcc/fold-const.h
  5cce8057cb6a40c0ce23fcd6497d35c0  gcc/fold-mem-offsets.cc
! 698c25018690163adc1c1cb974624477  gcc/fortran/ChangeLog
  3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
  d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
  bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
*************** af0d7f72f88d0810924a6a579045eeab  gcc/fo
*** 5914,5929 ****
  aa3e28e6adf564765577a4f376bb9d05  gcc/fortran/data.cc
  2a77523a8c759e7a5e480175dfce3e06  gcc/fortran/data.h
  6b5d95421eafe28315fbe36ecacac443  gcc/fortran/decl.cc
! dbbc0770ad9027571c63b5d0533e40ec  gcc/fortran/dependency.cc
! 5a69241d57d8b6127ecb02e0a22bee6e  gcc/fortran/dependency.h
  af59533c4bfc13e7b07e6ec1c164832c  gcc/fortran/dump-parse-tree.cc
! eaa509e23c681b4615a43afdbfe3cb0d  gcc/fortran/error.cc
  e3557d087bbbdf3b8f63250a32e95b5c  gcc/fortran/expr.cc
  5790e4e2fb5a21288fcb647a0dca23c4  gcc/fortran/f95-lang.cc
  7e5624e7daaba902f7b3b3ee4abd8bcd  gcc/fortran/frontend-passes.cc
  f12471f71a85ea43d5295d1190faf890  gcc/fortran/gfc-diagnostic.def
  21286a817891898ac50a2b843007652d  gcc/fortran/gfc-internals.texi
! 17483db08a4b7e41205f7b503228420b  gcc/fortran/gfortran.h
  57ff50b64741422eb357b86659a8afc8  gcc/fortran/gfortran.texi
  cc84451cbcaa91ddd59babe04bda0b1a  gcc/fortran/gfortranspec.cc
  e8869e5dae32915cb590df6cff07ab46  gcc/fortran/interface.cc
--- 5914,5929 ----
  aa3e28e6adf564765577a4f376bb9d05  gcc/fortran/data.cc
  2a77523a8c759e7a5e480175dfce3e06  gcc/fortran/data.h
  6b5d95421eafe28315fbe36ecacac443  gcc/fortran/decl.cc
! c4bd3bd07738a9a85beae142aa8054e3  gcc/fortran/dependency.cc
! fb3b0f1414056b23597f5e270a953409  gcc/fortran/dependency.h
  af59533c4bfc13e7b07e6ec1c164832c  gcc/fortran/dump-parse-tree.cc
! 8e370801f4b220b49e7bc0024382e8b7  gcc/fortran/error.cc
  e3557d087bbbdf3b8f63250a32e95b5c  gcc/fortran/expr.cc
  5790e4e2fb5a21288fcb647a0dca23c4  gcc/fortran/f95-lang.cc
  7e5624e7daaba902f7b3b3ee4abd8bcd  gcc/fortran/frontend-passes.cc
  f12471f71a85ea43d5295d1190faf890  gcc/fortran/gfc-diagnostic.def
  21286a817891898ac50a2b843007652d  gcc/fortran/gfc-internals.texi
! c4a213d76d236acb33bf86ba3c71e93d  gcc/fortran/gfortran.h
  57ff50b64741422eb357b86659a8afc8  gcc/fortran/gfortran.texi
  cc84451cbcaa91ddd59babe04bda0b1a  gcc/fortran/gfortranspec.cc
  e8869e5dae32915cb590df6cff07ab46  gcc/fortran/interface.cc
*************** ed7c9cd3a6d06ebdc33c533895c02089  gcc/fo
*** 5948,5971 ****
  e85c32445c6de7c1d06b379a0d1f12ad  gcc/fortran/module.cc
  2788da2a93ded20d578d7ac14a5c9d61  gcc/fortran/openmp.cc
  ba11ab9ac11e6a78fa7706263e42f1fc  gcc/fortran/options.cc
! 56af741644ab30aa09221a750079e265  gcc/fortran/parse.cc
  6afe26dd3f7a33ff8c524687d1958f05  gcc/fortran/parse.h
! a0e2907182a3f4a299681840e8f5be43  gcc/fortran/primary.cc
  1e8189098fb2fdc82570f4567604be79  gcc/fortran/resolve.cc
! bf73188a78ecc3c99bc6915db827d75f  gcc/fortran/scanner.cc
  1cfffbabece85f419a6ca2676917e619  gcc/fortran/scanner.h
  be0b83b5f771bbe50926a1109ebd9e09  gcc/fortran/simplify.cc
  a0bad1c11baa50813a82d72f738f0872  gcc/fortran/st.cc
! 2a03d2f225a240270c75c372fe988eef  gcc/fortran/symbol.cc
  74785cb703ffef31c77a2efb99685bb4  gcc/fortran/target-memory.cc
  d418319a23a87a1e1e8054eaeb5d527b  gcc/fortran/target-memory.h
! d0ac931c193ddb2158ee0a8a5b52d53a  gcc/fortran/trans-array.cc
  c0fda053eecaf4f55c32d4fe8c8db3e5  gcc/fortran/trans-array.h
  700878379c55cdec457b83a922d93699  gcc/fortran/trans-common.cc
  c420f80da3e0e794311a9b90c49abce5  gcc/fortran/trans-const.cc
  5644e20cd4aa0324875834a377cf89a4  gcc/fortran/trans-const.h
! 24567c176b72863d35d3ff736d50152b  gcc/fortran/trans-decl.cc
! 2f8a75ecc316d717002ea1f10a4adc5f  gcc/fortran/trans-expr.cc
  50146a04d803fafbc56c31ef04c375c3  gcc/fortran/trans-intrinsic.cc
  9bfdb89867309e2ece2578749f55ece8  gcc/fortran/trans-io.cc
  0a79d8f68201e631e188013e31166c86  gcc/fortran/trans-openmp.cc
--- 5948,5971 ----
  e85c32445c6de7c1d06b379a0d1f12ad  gcc/fortran/module.cc
  2788da2a93ded20d578d7ac14a5c9d61  gcc/fortran/openmp.cc
  ba11ab9ac11e6a78fa7706263e42f1fc  gcc/fortran/options.cc
! b39625edcc7118caa07695e1e5e22e50  gcc/fortran/parse.cc
  6afe26dd3f7a33ff8c524687d1958f05  gcc/fortran/parse.h
! 9461c80354482673fdfa5e97754b0abd  gcc/fortran/primary.cc
  1e8189098fb2fdc82570f4567604be79  gcc/fortran/resolve.cc
! 9b448d9bb5190ad6da14b055dc7eeba0  gcc/fortran/scanner.cc
  1cfffbabece85f419a6ca2676917e619  gcc/fortran/scanner.h
  be0b83b5f771bbe50926a1109ebd9e09  gcc/fortran/simplify.cc
  a0bad1c11baa50813a82d72f738f0872  gcc/fortran/st.cc
! 00ba19297716e9491650d4ffa405d16d  gcc/fortran/symbol.cc
  74785cb703ffef31c77a2efb99685bb4  gcc/fortran/target-memory.cc
  d418319a23a87a1e1e8054eaeb5d527b  gcc/fortran/target-memory.h
! af90959864611199812e3a28a1909e92  gcc/fortran/trans-array.cc
  c0fda053eecaf4f55c32d4fe8c8db3e5  gcc/fortran/trans-array.h
  700878379c55cdec457b83a922d93699  gcc/fortran/trans-common.cc
  c420f80da3e0e794311a9b90c49abce5  gcc/fortran/trans-const.cc
  5644e20cd4aa0324875834a377cf89a4  gcc/fortran/trans-const.h
! 70965dc0e9082ba334b94e88dfdd2e4e  gcc/fortran/trans-decl.cc
! 8d3ea3cc90401cb925547c79abb1c955  gcc/fortran/trans-expr.cc
  50146a04d803fafbc56c31ef04c375c3  gcc/fortran/trans-intrinsic.cc
  9bfdb89867309e2ece2578749f55ece8  gcc/fortran/trans-io.cc
  0a79d8f68201e631e188013e31166c86  gcc/fortran/trans-openmp.cc
*************** c420f80da3e0e794311a9b90c49abce5  gcc/fo
*** 5973,5980 ****
  1b5e4247678ad0441b5b0f26de2ebd4f  gcc/fortran/trans-stmt.h
  e6081de6c57d50b44beba6f37c54a0fe  gcc/fortran/trans-types.cc
  99093042b01c6c4c1ee2c064808bdaa0  gcc/fortran/trans-types.h
! d9d274d783642f6e1749266ab7178b64  gcc/fortran/trans.cc
! 29a1230eb3bca55231d07eb0a5c33e86  gcc/fortran/trans.h
  a5dcb5f38620ab51c2408b1d0fade263  gcc/fortran/trigd_fe.inc
  14d5ef9c0a16145fc4d821f1a1eaecbb  gcc/fortran/types.def
  2c61c6deb62c5b2a8f5eb059ac90ed17  gcc/fp-test.cc
--- 5973,5980 ----
  1b5e4247678ad0441b5b0f26de2ebd4f  gcc/fortran/trans-stmt.h
  e6081de6c57d50b44beba6f37c54a0fe  gcc/fortran/trans-types.cc
  99093042b01c6c4c1ee2c064808bdaa0  gcc/fortran/trans-types.h
! 95df6c59313fb15547f9a47f91c98273  gcc/fortran/trans.cc
! 511654c3bc23a242dc41010c4065dfae  gcc/fortran/trans.h
  a5dcb5f38620ab51c2408b1d0fade263  gcc/fortran/trigd_fe.inc
  14d5ef9c0a16145fc4d821f1a1eaecbb  gcc/fortran/types.def
  2c61c6deb62c5b2a8f5eb059ac90ed17  gcc/fp-test.cc
*************** e8a9eb01b9451a357155e7152df1c669  gcc/ta
*** 8062,8068 ****
  a05663c52c607143c607d3ecf1391979  gcc/targhooks.cc
  51d240e574a3f9ecec346d64a04ac634  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! a458b9f72e03d7ba628b190fd36d9397  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
--- 8062,8068 ----
  a05663c52c607143c607d3ecf1391979  gcc/targhooks.cc
  51d240e574a3f9ecec346d64a04ac634  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! defdae5d5cdd7d2f36a0f48845d585da  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
*************** a1fe9428938050a47df83f9ccfccf156  gcc/te
*** 68013,68018 ****
--- 68013,68019 ----
  95b83592cd208bcb180064639fd1558f  gcc/testsuite/gcc.target/arm/pr115153.c
  39327fb26a438561d0617a9bfe99c59f  gcc/testsuite/gcc.target/arm/pr115188.c
  01f3623877a32b45af0d229eab49f4cf  gcc/testsuite/gcc.target/arm/pr117675.c
+ 82da20b2c4061a368f405dbeb1cdb341  gcc/testsuite/gcc.target/arm/pr123271.c
  3ce2c6a399da67ae36390d522e1f1296  gcc/testsuite/gcc.target/arm/pr19599.c
  3425143e88f989a8f52f345e6237106a  gcc/testsuite/gcc.target/arm/pr26702.c
  fc0dd660f56108005b4f0b142e94d10d  gcc/testsuite/gcc.target/arm/pr37780_1.c
*************** d922e822af6878c17645657a31f3a9ee  gcc/te
*** 93271,93276 ****
--- 93272,93278 ----
  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
*************** d8731c4a7857584ae6a224900773f967  gcc/te
*** 95493,95498 ****
--- 95495,95502 ----
  89a3206dfabae1e31ea62ec7fa264ee6  gcc/testsuite/gfortran.dg/dependency_8.f90
  bed947f18e24a0489e41529f588cfef4  gcc/testsuite/gfortran.dg/dependency_9.f90
  67277aa32b5b5873080f3f4293a6ae8c  gcc/testsuite/gfortran.dg/dependent_decls_1.f90
+ 5c97b1e6df5e623a008d4043400e5a38  gcc/testsuite/gfortran.dg/dependent_decls_2.f90
+ f9b07f25fc6afc502b47a3f76ffca486  gcc/testsuite/gfortran.dg/dependent_decls_3.f90
  f83ad6bd054390e6c1c83e3617a0ca54  gcc/testsuite/gfortran.dg/der_array_1.f90
  4eb23dea6239510ff3d0398ca1d0c6db  gcc/testsuite/gfortran.dg/der_array_io_1.f90
  35332f10121eeab34a37f9cff36e5e29  gcc/testsuite/gfortran.dg/der_array_io_2.f90
*************** fdf6add00f0bd7ce436abe942eb65cf3  gcc/te
*** 95536,95541 ****
--- 95540,95546 ----
  07fab892951fdbb2c35b3e8978ea647a  gcc/testsuite/gfortran.dg/derived_init_4.f90
  a19ffb5a22d6663608efe30bfaaa6c3e  gcc/testsuite/gfortran.dg/derived_init_5.f90
  97a57d72c5ce6be81502a605595f8ac8  gcc/testsuite/gfortran.dg/derived_init_6.f90
+ b0072b5367ee04e1e8e87a1d5a079806  gcc/testsuite/gfortran.dg/derived_init_7.f90
  266cbacba031d7de4ed0c83cd0d6ce49  gcc/testsuite/gfortran.dg/derived_name_1.f90
  83e722dbb79574dcea48de4b591f9764  gcc/testsuite/gfortran.dg/derived_name_2.f
  1437ef5bc0341f947a22ccc26daa8e22  gcc/testsuite/gfortran.dg/derived_pointer_null_1.f90
*************** c03d85028dd31582bfd3d1f8ca418aa3  gcc/te
*** 96495,96500 ****
--- 96500,96506 ----
  a003f13028702fcf73483db6234e657a  gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-parallel.f90
  dc0ed8100589e01d391b4954bad7b048  gcc/testsuite/gfortran.dg/goacc/nested-reductions-2-routine.f90
  f8fe06410fd4ca50e585e681d35f4482  gcc/testsuite/gfortran.dg/goacc/note-parallelism.f90
+ 8f7b26e930f121be0c4ee68193d7adf3  gcc/testsuite/gfortran.dg/goacc/omp-108382.f90
  44c6212e07bf6b44bd6d26e3224f93d7  gcc/testsuite/gfortran.dg/goacc/omp-fixed.f
  0d004a9c292993dcae37ce3958b7e212  gcc/testsuite/gfortran.dg/goacc/omp.f95
  30617b4201e681ce9fc02f97597b907d  gcc/testsuite/gfortran.dg/goacc/orphan-reductions-1.f90
*************** a3ab8fbef738997039cfd45f350461a3  gcc/te
*** 98745,98751 ****
--- 98751,98759 ----
  77eca811eac1f80edb0f33c68ac0c4d3  gcc/testsuite/gfortran.dg/power_7.f90
  457d6bb30d331f4d3250628bdae53dc3  gcc/testsuite/gfortran.dg/power_8.f90
  e13b5dd50c332ea865cb6fabb5f79f29  gcc/testsuite/gfortran.dg/pr100154.f90
+ d7642fe0f50bb28f873042d6721e3ffb  gcc/testsuite/gfortran.dg/pr100155.f90
  c9e427811a6c55713cbb096365eec807  gcc/testsuite/gfortran.dg/pr100193.f90
+ a7f1c1fb2de0acfdd19303c2a0d29d73  gcc/testsuite/gfortran.dg/pr100194.f90
  e08828a7d864f8531a58aa25e1b58894  gcc/testsuite/gfortran.dg/pr100273.f90
  fc0ae38e4fdc2d7761aba57181c97b51  gcc/testsuite/gfortran.dg/pr100551.f90
  17f130e627232745d6279696b6984514  gcc/testsuite/gfortran.dg/pr100949.f90
*************** cbd40bc334c217d37c198b1f27373810  gcc/te
*** 98774,98779 ****
--- 98782,98788 ----
  107263fe1c86ee042c855774a2b8e242  gcc/testsuite/gfortran.dg/pr102532.f90
  4efde3b7d107b33c9c8792e23b683d17  gcc/testsuite/gfortran.dg/pr102596.f90
  c0ae1c78c693e1256c471360998b7568  gcc/testsuite/gfortran.dg/pr102597.f90
+ 322a54b0e735415005b9446efbfd32f0  gcc/testsuite/gfortran.dg/pr102619.f90
  c081e1f510a2d68ec176356111dab188  gcc/testsuite/gfortran.dg/pr102685.f90
  d99cea26823109c0bb853b42df152999  gcc/testsuite/gfortran.dg/pr102715.f90
  f28998ba16e7a78633a9de3d5eaf0667  gcc/testsuite/gfortran.dg/pr102816.f90
*************** a5234963084d71f3cbff36fdddbc2a39  gcc/te
*** 99666,99671 ****
--- 99675,99681 ----
  662210e69dcf405442181d9c4c2a91ec  gcc/testsuite/gfortran.dg/pr95827.f90
  62cd2c3c38efcf3442a00b172c23a0f1  gcc/testsuite/gfortran.dg/pr95828.f90
  f2cfdbd57b646ea77c8d2d572b0b4a79  gcc/testsuite/gfortran.dg/pr95829.f90
+ 153dd2ab3bb579bad81f3ed62e079ff2  gcc/testsuite/gfortran.dg/pr95879.f90
  4624ef21d27373ca19abedc766bf24c8  gcc/testsuite/gfortran.dg/pr95880.f90
  5f79fc5c2f7a030ad1b82b4793b0c8a7  gcc/testsuite/gfortran.dg/pr95881.f90
  5f9a08444201a18392648013e972a14a  gcc/testsuite/gfortran.dg/pr95882_1.f90
diff -Nrcpad gcc-14-20260410/gcc/ChangeLog gcc-14-20260417/gcc/ChangeLog
*** gcc-14-20260410/gcc/ChangeLog	Fri Apr 10 22:32:05 2026
--- gcc-14-20260417/gcc/ChangeLog	Fri Apr 17 22:32:05 2026
***************
*** 1,3 ****
--- 1,24 ----
+ 2026-04-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2026-03-11  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/123271
+ 	* config/arm/arm.md (subvsi3_intmin): Renamed to ...
+ 	(sub_cmpVsi3_intmin): ... this.
+ 	(subvsi3): Renamed to ...
+ 	(sub_cmpVsi3): ... this.
+ 	(subvsi3_imm1): Renamed to ...
+ 	(sub_cmpVsi3_imm1): ... this.
+ 	(usubvsi3_borrow): Renamed to ...
+ 	(usub_cmpVsi3_borrow): ... this.
+ 	(usubvsi3_borrow_imm): Renamed to ...
+ 	(usub_cmpVsi3_borrow_imm): ... this.
+ 	(subvsi3_borrow): Renamed to ...
+ 	(sub_cmpVsi3_borrow): ... this.
+ 	(subvsi3_borrow_imm): Renamed to ...
+ 	(sub_cmpVsi3_borrow_imm): ... this.
+ 
  2026-04-09  Andrew Pinski  <quic_apinski@quicinc.com>
  
  	PR target/117771
diff -Nrcpad gcc-14-20260410/gcc/DATESTAMP gcc-14-20260417/gcc/DATESTAMP
*** gcc-14-20260410/gcc/DATESTAMP	Fri Apr 10 22:32:06 2026
--- gcc-14-20260417/gcc/DATESTAMP	Fri Apr 17 22:32:05 2026
***************
*** 1 ****
! 20260410
--- 1 ----
! 20260417
diff -Nrcpad gcc-14-20260410/gcc/ada/ChangeLog gcc-14-20260417/gcc/ada/ChangeLog
*** gcc-14-20260410/gcc/ada/ChangeLog	Fri Apr 10 22:32:06 2026
--- gcc-14-20260417/gcc/ada/ChangeLog	Fri Apr 17 22:32:05 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-04-12  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/124836
+ 	* adaint.c [__MINGW32__]: Do not include mingw32.h twice, and also
+ 	include sys/param.h.
+ 
  2026-03-23  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/124607
diff -Nrcpad gcc-14-20260410/gcc/ada/adaint.c gcc-14-20260417/gcc/ada/adaint.c
*** gcc-14-20260410/gcc/ada/adaint.c	Fri Apr 10 22:32:06 2026
--- gcc-14-20260417/gcc/ada/adaint.c	Fri Apr 17 22:32:05 2026
*************** const char *__gnat_library_template = GN
*** 337,347 ****
  
  #else
  
- #if defined (__MINGW32__)
- #include "mingw32.h"
- #else
  #include <sys/param.h>
- #endif
  
  #ifdef MAXPATHLEN
  #define GNAT_MAX_PATH_LEN MAXPATHLEN
--- 337,343 ----
diff -Nrcpad gcc-14-20260410/gcc/config/arm/arm.md gcc-14-20260417/gcc/config/arm/arm.md
*** gcc-14-20260410/gcc/config/arm/arm.md	Fri Apr 10 22:32:06 2026
--- gcc-14-20260417/gcc/config/arm/arm.md	Fri Apr 17 22:32:06 2026
***************
*** 1012,1018 ****
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "subvsi3_intmin"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	  (plus:DI
--- 1012,1018 ----
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "sub_cmpVsi3_intmin"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	  (plus:DI
***************
*** 1432,1446 ****
        operands[2] = GEN_INT (-INTVAL (operands[2]));
        /* Special case for INT_MIN.  */
        if (INTVAL (operands[2]) == 0x80000000)
! 	emit_insn (gen_subvsi3_intmin (operands[0], operands[1]));
        else
  	emit_insn (gen_addsi3_compareV_imm (operands[0], operands[1],
! 					  operands[2]));
      }
    else if (CONST_INT_P (operands[1]))
!     emit_insn (gen_subvsi3_imm1 (operands[0], operands[1], operands[2]));
    else
!     emit_insn (gen_subvsi3 (operands[0], operands[1], operands[2]));
  
    arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[3]);
    DONE;
--- 1432,1446 ----
        operands[2] = GEN_INT (-INTVAL (operands[2]));
        /* Special case for INT_MIN.  */
        if (INTVAL (operands[2]) == 0x80000000)
! 	emit_insn (gen_sub_cmpVsi3_intmin (operands[0], operands[1]));
        else
  	emit_insn (gen_addsi3_compareV_imm (operands[0], operands[1],
! 					    operands[2]));
      }
    else if (CONST_INT_P (operands[1]))
!     emit_insn (gen_sub_cmpVsi3_imm1 (operands[0], operands[1], operands[2]));
    else
!     emit_insn (gen_sub_cmpVsi3 (operands[0], operands[1], operands[2]));
  
    arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[3]);
    DONE;
***************
*** 1513,1526 ****
      hi_op2 = force_reg (SImode, hi_op2);
    rtx ccreg = gen_rtx_REG (mode, CC_REGNUM);
    if (CONST_INT_P (hi_op2))
!     emit_insn (gen_subvsi3_borrow_imm (hi_result, hi_op1, hi_op2,
  				       gen_rtx_LTU (SImode, ccreg, const0_rtx),
  				       gen_rtx_LTU (DImode, ccreg,
  						    const0_rtx)));
-   else
-     emit_insn (gen_subvsi3_borrow (hi_result, hi_op1, hi_op2,
- 				   gen_rtx_LTU (SImode, ccreg, const0_rtx),
- 				   gen_rtx_LTU (DImode, ccreg, const0_rtx)));
    arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[3]);
  
    DONE;
--- 1513,1528 ----
      hi_op2 = force_reg (SImode, hi_op2);
    rtx ccreg = gen_rtx_REG (mode, CC_REGNUM);
    if (CONST_INT_P (hi_op2))
!     emit_insn (gen_sub_cmpVsi3_borrow_imm (hi_result, hi_op1, hi_op2,
! 					   gen_rtx_LTU (SImode, ccreg,
! 							const0_rtx),
! 					   gen_rtx_LTU (DImode, ccreg,
! 							const0_rtx)));
!   else
!     emit_insn (gen_sub_cmpVsi3_borrow (hi_result, hi_op1, hi_op2,
  				       gen_rtx_LTU (SImode, ccreg, const0_rtx),
  				       gen_rtx_LTU (DImode, ccreg,
  						    const0_rtx)));
    arm_gen_unlikely_cbranch (NE, CC_Vmode, operands[3]);
  
    DONE;
***************
*** 1630,1644 ****
      hi_op2 = force_reg (SImode, hi_op2);
    rtx ccreg = gen_rtx_REG (mode, CC_REGNUM);
    if (CONST_INT_P (hi_op2))
!     emit_insn (gen_usubvsi3_borrow_imm (hi_result, hi_op1, hi_op2,
! 					GEN_INT (UINTVAL (hi_op2) & 0xffffffff),
  					gen_rtx_LTU (SImode, ccreg, const0_rtx),
  					gen_rtx_LTU (DImode, ccreg,
  						     const0_rtx)));
-   else
-     emit_insn (gen_usubvsi3_borrow (hi_result, hi_op1, hi_op2,
- 				    gen_rtx_LTU (SImode, ccreg, const0_rtx),
- 				    gen_rtx_LTU (DImode, ccreg, const0_rtx)));
    arm_gen_unlikely_cbranch (LTU, CC_Bmode, operands[3]);
  
    DONE;
--- 1632,1649 ----
      hi_op2 = force_reg (SImode, hi_op2);
    rtx ccreg = gen_rtx_REG (mode, CC_REGNUM);
    if (CONST_INT_P (hi_op2))
!     emit_insn (gen_usub_cmpVsi3_borrow_imm (hi_result, hi_op1, hi_op2,
! 					    GEN_INT (UINTVAL (hi_op2)
! 						     & 0xffffffff),
! 					    gen_rtx_LTU (SImode, ccreg,
! 							 const0_rtx),
! 					    gen_rtx_LTU (DImode, ccreg,
! 							 const0_rtx)));
!   else
!     emit_insn (gen_usub_cmpVsi3_borrow (hi_result, hi_op1, hi_op2,
  					gen_rtx_LTU (SImode, ccreg, const0_rtx),
  					gen_rtx_LTU (DImode, ccreg,
  						     const0_rtx)));
    arm_gen_unlikely_cbranch (LTU, CC_Bmode, operands[3]);
  
    DONE;
***************
*** 1657,1663 ****
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "subvsi3"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
--- 1662,1668 ----
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "sub_cmpVsi3"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
***************
*** 1674,1680 ****
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "subvsi3_imm1"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
--- 1679,1685 ----
     (set_attr "type" "alus_sreg")]
  )
  
! (define_insn "sub_cmpVsi3_imm1"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
***************
*** 2131,2137 ****
     (set_attr "type" "alus_imm")]
  )
  
! (define_insn "usubvsi3_borrow"
    [(set (reg:CC_B CC_REGNUM)
  	(compare:CC_B
  	 (zero_extend:DI (match_operand:SI 1 "s_register_operand" "0,r"))
--- 2136,2142 ----
     (set_attr "type" "alus_imm")]
  )
  
! (define_insn "usub_cmpVsi3_borrow"
    [(set (reg:CC_B CC_REGNUM)
  	(compare:CC_B
  	 (zero_extend:DI (match_operand:SI 1 "s_register_operand" "0,r"))
***************
*** 2149,2155 ****
     (set_attr "length" "2,4")]
  )
  
! (define_insn "usubvsi3_borrow_imm"
    [(set (reg:CC_B CC_REGNUM)
  	(compare:CC_B
  	 (zero_extend:DI (match_operand:SI 1 "s_register_operand" "r,r"))
--- 2154,2160 ----
     (set_attr "length" "2,4")]
  )
  
! (define_insn "usub_cmpVsi3_borrow_imm"
    [(set (reg:CC_B CC_REGNUM)
  	(compare:CC_B
  	 (zero_extend:DI (match_operand:SI 1 "s_register_operand" "r,r"))
***************
*** 2168,2174 ****
     (set_attr "type" "alus_imm")]
  )
  
! (define_insn "subvsi3_borrow"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
--- 2173,2179 ----
     (set_attr "type" "alus_imm")]
  )
  
! (define_insn "sub_cmpVsi3_borrow"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
***************
*** 2189,2195 ****
     (set_attr "length" "2,4")]
  )
  
! (define_insn "subvsi3_borrow_imm"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
--- 2194,2200 ----
     (set_attr "length" "2,4")]
  )
  
! (define_insn "sub_cmpVsi3_borrow_imm"
    [(set (reg:CC_V CC_REGNUM)
  	(compare:CC_V
  	 (minus:DI
diff -Nrcpad gcc-14-20260410/gcc/fortran/ChangeLog gcc-14-20260417/gcc/fortran/ChangeLog
*** gcc-14-20260410/gcc/fortran/ChangeLog	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/ChangeLog	Fri Apr 17 22:32:07 2026
***************
*** 1,3 ****
--- 1,53 ----
+ 2026-04-14  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.
+ 
+ 2026-04-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 	    Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/124751
+ 	* trans-array.cc (gfc_conv_array_parameter): Build a packed
+ 	descriptor for assumed-rank actual arguments instead of reusing
+ 	stale metadata from the original descriptor.
+ 
+ 2026-04-14  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-01  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/100194
+ 	* trans-expr.cc (gfc_conv_procedure_call): Skip
+ 	gfc_conv_subref_array_arg for assumed-rank actual arguments
+ 	(e->rank == -1) when the dummy is contiguous.
+ 
+ 2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-30  Christopher Albert  <albert@tugraz.at>
+ 
+ 	* scanner.cc (skip_free_oacc_sentinel): Clear openmp_flag only for
+ 	fresh OpenACC directive lines.
+ 	(skip_free_omp_sentinel): Clear openacc_flag only for fresh OpenMP
+ 	directive lines.
+ 
+ 2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/95879
+ 	PR fortran/95879
+ 	* parse.cc (fixup_st_func_formals): New function to update
+ 	statement function formal argument lists referencing a symbol
+ 	about to be freed.
+ 	(gfc_fixup_sibling_symbols): Call fixup_st_func_formals before
+ 	gfc_release_symbol.
+ 
  2026-04-05  Christopher Albert  <albert@tugraz.at>
  
  	Backported from master:
diff -Nrcpad gcc-14-20260410/gcc/fortran/dependency.cc gcc-14-20260417/gcc/fortran/dependency.cc
*** gcc-14-20260410/gcc/fortran/dependency.cc	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/dependency.cc	Fri Apr 17 22:32:07 2026
*************** gfc_omp_expr_prefix_same (gfc_expr *lexp
*** 2497,2499 ****
--- 2497,2581 ----
  
    return true;
  }
+ 
+ 
+ /* gfc_function_dependency returns true for non-dummy symbols with dependencies
+    on an old-fashioned function result (ie. proc_name = proc_name->result).
+    This is used to ensure that initialization code appears after the function
+    result is treated and that any mutual dependencies between these symbols are
+    respected.  */
+ 
+ static bool
+ dependency_fcn (gfc_expr *e, gfc_symbol *sym,
+ 		 int *f ATTRIBUTE_UNUSED)
+ {
+   if (e == NULL)
+     return false;
+ 
+   if (e && e->expr_type == EXPR_VARIABLE)
+     {
+       if (e->symtree && e->symtree->n.sym == sym)
+ 	return true;
+       /* Recurse to see if this symbol is dependent on the function result. If
+ 	 so an indirect dependence exists, which should be handled in the same
+ 	 way as a direct dependence. The recursion is prevented from being
+ 	 infinite by statement order.  */
+       else if (e->symtree && e->symtree->n.sym)
+ 	return gfc_function_dependency (e->symtree->n.sym, sym);
+     }
+ 
+   return false;
+ }
+ 
+ 
+ bool
+ gfc_function_dependency (gfc_symbol *sym, gfc_symbol *proc_name)
+ {
+   bool dep = false;
+ 
+   if (proc_name && proc_name->attr.function
+       && proc_name == proc_name->result
+       && !(sym->attr.dummy || sym->attr.result))
+     {
+       if (sym->fn_result_dep)
+ 	return true;
+ 
+       if (sym->as && sym->as->type == AS_EXPLICIT)
+ 	{
+ 	  for (int dim = 0; dim < sym->as->rank; dim++)
+ 	    {
+ 	      if (sym->as->lower[dim]
+ 		  && sym->as->lower[dim]->expr_type != EXPR_CONSTANT)
+ 		dep = gfc_traverse_expr (sym->as->lower[dim], proc_name,
+ 					 dependency_fcn, 0);
+ 	      if (dep)
+ 		{
+ 		  sym->fn_result_dep = 1;
+ 		  return true;
+ 		}
+ 	      if (sym->as->upper[dim]
+ 		  && sym->as->upper[dim]->expr_type != EXPR_CONSTANT)
+ 		dep = gfc_traverse_expr (sym->as->upper[dim], proc_name,
+ 					 dependency_fcn, 0);
+ 	      if (dep)
+ 		{
+ 		  sym->fn_result_dep = 1;
+ 		  return true;
+ 		}
+ 	    }
+ 	}
+ 
+       if (sym->ts.type == BT_CHARACTER
+ 	  && sym->ts.u.cl && sym->ts.u.cl->length
+ 	  && sym->ts.u.cl->length->expr_type != EXPR_CONSTANT)
+ 	dep = gfc_traverse_expr (sym->ts.u.cl->length, proc_name,
+ 				 dependency_fcn, 0);
+       if (dep)
+ 	{
+ 	  sym->fn_result_dep = 1;
+ 	  return true;
+ 	}
+     }
+ 
+   return false;
+  }
diff -Nrcpad gcc-14-20260410/gcc/fortran/dependency.h gcc-14-20260417/gcc/fortran/dependency.h
*** gcc-14-20260410/gcc/fortran/dependency.h	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/dependency.h	Fri Apr 17 22:32:07 2026
*************** enum gfc_dep_check
*** 23,29 ****
  {
    NOT_ELEMENTAL,        /* Not elemental case: normal dependency check.  */
    ELEM_CHECK_VARIABLE,  /* Test whether variables overlap.  */
!   ELEM_DONT_CHECK_VARIABLE  /* Test whether variables overlap only if used 
  			       in an expression.  */
  };
  
--- 23,29 ----
  {
    NOT_ELEMENTAL,        /* Not elemental case: normal dependency check.  */
    ELEM_CHECK_VARIABLE,  /* Test whether variables overlap.  */
!   ELEM_DONT_CHECK_VARIABLE  /* Test whether variables overlap only if used
  			       in an expression.  */
  };
  
*************** bool gfc_are_equivalenced_arrays (gfc_ex
*** 43,45 ****
--- 43,47 ----
  bool gfc_omp_expr_prefix_same (gfc_expr *, gfc_expr *);
  
  gfc_expr * gfc_discard_nops (gfc_expr *);
+ 
+ bool gfc_function_dependency (gfc_symbol *, gfc_symbol *);
diff -Nrcpad gcc-14-20260410/gcc/fortran/error.cc gcc-14-20260417/gcc/fortran/error.cc
*** gcc-14-20260410/gcc/fortran/error.cc	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/error.cc	Fri Apr 17 22:32:07 2026
*************** error_print (const char *type, const cha
*** 892,898 ****
  #else
  	      m = INTTYPE_MAXIMUM (ptrdiff_t);
  #endif
! 	      m = 2 * m + 1;  
  	      error_uinteger (a & m);
  	    }
  	  else
--- 892,898 ----
  #else
  	      m = INTTYPE_MAXIMUM (ptrdiff_t);
  #endif
! 	      m = 2 * m + 1;
  	      error_uinteger (a & m);
  	    }
  	  else
diff -Nrcpad gcc-14-20260410/gcc/fortran/gfortran.h gcc-14-20260417/gcc/fortran/gfortran.h
*** gcc-14-20260410/gcc/fortran/gfortran.h	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/gfortran.h	Fri Apr 17 22:32:07 2026
*************** typedef struct gfc_symbol
*** 1887,1895 ****
       points to C and B's is NULL.  */
    struct gfc_common_head* common_head;
  
!   /* Make sure setup code for dummy arguments is generated in the correct
!      order.  */
!   int dummy_order;
  
    gfc_namelist *namelist, *namelist_tail;
  
--- 1887,1894 ----
       points to C and B's is NULL.  */
    struct gfc_common_head* common_head;
  
!   /* Make sure initialization code is generated in the correct order.  */
!   int decl_order;
  
    gfc_namelist *namelist, *namelist_tail;
  
*************** typedef struct gfc_symbol
*** 1929,1934 ****
--- 1928,1935 ----
    unsigned forall_index:1;
    /* Set if the symbol is used in a function result specification .  */
    unsigned fn_result_spec:1;
+   /* Set if the symbol spec. depends on an old-style function result.  */
+   unsigned fn_result_dep:1;
    /* Used to avoid multiple resolutions of a single symbol.  */
    /* = 2 if this has already been resolved as an intrinsic,
         in gfc_resolve_intrinsic,
diff -Nrcpad gcc-14-20260410/gcc/fortran/parse.cc gcc-14-20260417/gcc/fortran/parse.cc
*** gcc-14-20260410/gcc/fortran/parse.cc	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/parse.cc	Fri Apr 17 22:32:07 2026
*************** parse_executable (gfc_statement st)
*** 6405,6410 ****
--- 6405,6432 ----
  }
  
  
+ /* Update statement function formal argument lists that reference OLD_SYM
+    to point to NEW_SYM instead.  This prevents use-after-free when
+    gfc_fixup_sibling_symbols replaces and frees a symbol that is also
+    used as a statement function dummy argument (PR95879).  */
+ 
+ static void
+ fixup_st_func_formals (gfc_symtree *st, gfc_symbol *old_sym,
+ 		       gfc_symbol *new_sym)
+ {
+   if (st == NULL)
+     return;
+ 
+   fixup_st_func_formals (st->left, old_sym, new_sym);
+   fixup_st_func_formals (st->right, old_sym, new_sym);
+ 
+   if (st->n.sym && st->n.sym->attr.proc == PROC_ST_FUNCTION)
+     for (gfc_formal_arglist *fa = st->n.sym->formal; fa; fa = fa->next)
+       if (fa->sym == old_sym)
+ 	fa->sym = new_sym;
+ }
+ 
+ 
  /* Fix the symbols for sibling functions.  These are incorrectly added to
     the child namespace as the parser didn't know about this procedure.  */
  
*************** gfc_fixup_sibling_symbols (gfc_symbol *s
*** 6456,6461 ****
--- 6478,6488 ----
  	  st->n.sym = sym;
  	  sym->refs++;
  
+ 	  /* Update statement function formal argument lists that still
+ 	     reference old_sym before releasing it (PR95879).  */
+ 	  fixup_st_func_formals (ns->sym_root, old_sym, sym);
+ 
+ 
  	  gfc_release_symbol (old_sym);
  	}
  
diff -Nrcpad gcc-14-20260410/gcc/fortran/primary.cc gcc-14-20260417/gcc/fortran/primary.cc
*** gcc-14-20260410/gcc/fortran/primary.cc	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/primary.cc	Fri Apr 17 22:32:07 2026
*************** gfc_variable_attr (gfc_expr *expr, gfc_t
*** 2887,2898 ****
--- 2887,2900 ----
  
  	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-14-20260410/gcc/fortran/scanner.cc gcc-14-20260417/gcc/fortran/scanner.cc
*** gcc-14-20260410/gcc/fortran/scanner.cc	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/scanner.cc	Fri Apr 17 22:32:07 2026
*************** skip_free_oacc_sentinel (locus start, lo
*** 776,781 ****
--- 776,783 ----
        if ((c = next_char ()) == ' ' || c == '\t'
  	  || continue_flag)
  	{
+ 	  if (!continue_flag && (c == ' ' || c == '\t'))
+ 	    openmp_flag = 0;
  	  while (gfc_is_whitespace (c))
  	    c = next_char ();
  	  if (c != '\n' && c != '!')
*************** skip_free_omp_sentinel (locus start, loc
*** 816,821 ****
--- 818,825 ----
        if ((c = next_char ()) == ' ' || c == '\t'
  	  || continue_flag)
  	{
+ 	  if (!continue_flag && (c == ' ' || c == '\t'))
+ 	    openacc_flag = 0;
  	  while (gfc_is_whitespace (c))
  	    c = next_char ();
  	  if (c != '\n' && c != '!')
diff -Nrcpad gcc-14-20260410/gcc/fortran/symbol.cc gcc-14-20260417/gcc/fortran/symbol.cc
*** gcc-14-20260410/gcc/fortran/symbol.cc	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/symbol.cc	Fri Apr 17 22:32:07 2026
*************** const mstring dtio_procs[] =
*** 98,106 ****
  
  /* This is to make sure the backend generates setup code in the correct
     order.  */
! 
! static int next_dummy_order = 1;
! 
  
  gfc_namespace *gfc_current_ns;
  gfc_namespace *gfc_global_ns_list;
--- 98,104 ----
  
  /* This is to make sure the backend generates setup code in the correct
     order.  */
! static int next_decl_order = 1;
  
  gfc_namespace *gfc_current_ns;
  gfc_namespace *gfc_global_ns_list;
*************** conflict:
*** 941,955 ****
  void
  gfc_set_sym_referenced (gfc_symbol *sym)
  {
- 
    if (sym->attr.referenced)
      return;
  
    sym->attr.referenced = 1;
  
!   /* Remember which order dummy variables are accessed in.  */
!   if (sym->attr.dummy)
!     sym->dummy_order = next_dummy_order++;
  }
  
  
--- 939,951 ----
  void
  gfc_set_sym_referenced (gfc_symbol *sym)
  {
    if (sym->attr.referenced)
      return;
  
    sym->attr.referenced = 1;
  
!   /* Remember the declaration order.  */
!   sym->decl_order = next_decl_order++;
  }
  
  
diff -Nrcpad gcc-14-20260410/gcc/fortran/trans-array.cc gcc-14-20260417/gcc/fortran/trans-array.cc
*** gcc-14-20260410/gcc/fortran/trans-array.cc	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/trans-array.cc	Fri Apr 17 22:32:07 2026
*************** gfc_trans_auto_array_allocation (tree de
*** 6918,6923 ****
--- 6918,6924 ----
    tree space;
    tree inittree;
    bool onstack;
+   bool back;
  
    gcc_assert (!(sym->attr.pointer || sym->attr.allocatable));
  
*************** gfc_trans_auto_array_allocation (tree de
*** 6929,6934 ****
--- 6930,6941 ----
    gcc_assert (GFC_ARRAY_TYPE_P (type));
    onstack = TREE_CODE (type) != POINTER_TYPE;
  
+   /* In the case of non-dummy symbols with dependencies on an old-fashioned
+      function result (ie. proc_name = proc_name->result), gfc_add_init_cleanup
+      must be called with the last, optional argument false so that the alloc-
+      ation occurs after the processing of the result.  */
+   back = sym->fn_result_dep;
+ 
    gfc_init_block (&init);
  
    /* Evaluate character string length.  */
*************** gfc_trans_auto_array_allocation (tree de
*** 6956,6962 ****
  
    if (onstack)
      {
!       gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE);
        return;
      }
  
--- 6963,6970 ----
  
    if (onstack)
      {
!       gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE,
! 			    back);
        return;
      }
  
*************** gfc_trans_auto_array_allocation (tree de
*** 7043,7052 ****
        addr = fold_build1_loc (gfc_get_location (&sym->declared_at),
  			      ADDR_EXPR, TREE_TYPE (decl), space);
        gfc_add_modify (&init, decl, addr);
!       gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE);
        tmp = NULL_TREE;
      }
!   gfc_add_init_cleanup (block, inittree, tmp);
  }
  
  
--- 7051,7061 ----
        addr = fold_build1_loc (gfc_get_location (&sym->declared_at),
  			      ADDR_EXPR, TREE_TYPE (decl), space);
        gfc_add_modify (&init, decl, addr);
!       gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE,
! 			    back);
        tmp = NULL_TREE;
      }
!   gfc_add_init_cleanup (block, inittree, tmp, back);
  }
  
  
*************** gfc_conv_array_parameter (gfc_se * se, g
*** 8675,8680 ****
--- 8684,8690 ----
    tree tmp = NULL_TREE;
    tree stmt;
    tree parent = DECL_CONTEXT (current_function_decl);
+   tree ctree = NULL_TREE;
    bool full_array_var;
    bool this_array_result;
    bool contiguous;
*************** gfc_conv_array_parameter (gfc_se * se, g
*** 8966,8979 ****
  	  tmp = build_fold_indirect_ref_loc (input_location, desc);
  
  	  gfc_ss * ss = gfc_walk_expr (expr);
! 	  if (!transposed_dims (ss))
! 	    gfc_conv_descriptor_data_set (&se->pre, tmp, ptr);
! 	  else
  	    {
  	      tree old_field, new_field;
- 
- 	      /* The original descriptor has transposed dims so we can't reuse
- 		 it directly; we have to create a new one.  */
  	      tree old_desc = tmp;
  	      tree new_desc = gfc_create_var (TREE_TYPE (old_desc), "arg_desc");
  
--- 8976,8989 ----
  	  tmp = build_fold_indirect_ref_loc (input_location, desc);
  
  	  gfc_ss * ss = gfc_walk_expr (expr);
! 	  if (!transposed_dims (ss) && expr->rank != -1)
! 	    {
! 	      if (!ctree)
! 		gfc_conv_descriptor_data_set (&se->pre, tmp, ptr);
! 	    }
! 	  else if (!ctree)
  	    {
  	      tree old_field, new_field;
  	      tree old_desc = tmp;
  	      tree new_desc = gfc_create_var (TREE_TYPE (old_desc), "arg_desc");
  
*************** gfc_conv_array_parameter (gfc_se * se, g
*** 8981,8997 ****
  	      new_field = gfc_conv_descriptor_dtype (new_desc);
  	      gfc_add_modify (&se->pre, new_field, old_field);
  
! 	      old_field = gfc_conv_descriptor_offset (old_desc);
! 	      new_field = gfc_conv_descriptor_offset (new_desc);
! 	      gfc_add_modify (&se->pre, new_field, old_field);
  
! 	      for (int i = 0; i < expr->rank; i++)
  		{
! 		  old_field = gfc_conv_descriptor_dimension (old_desc,
  			gfc_rank_cst[get_array_ref_dim_for_loop_dim (ss, i)]);
! 		  new_field = gfc_conv_descriptor_dimension (new_desc,
  			gfc_rank_cst[i]);
! 		  gfc_add_modify (&se->pre, new_field, old_field);
  		}
  
  	      if (flag_coarray == GFC_FCOARRAY_LIB
--- 8991,9065 ----
  	      new_field = gfc_conv_descriptor_dtype (new_desc);
  	      gfc_add_modify (&se->pre, new_field, old_field);
  
! 	      if (expr->rank == -1)
! 		{
! 		  tree idx = gfc_create_var (TREE_TYPE (gfc_conv_descriptor_rank
! 							(old_desc)),
! 					     "idx");
! 		  tree stride = gfc_create_var (gfc_array_index_type, "stride");
! 		  stmtblock_t loop_body;
  
! 		  gfc_conv_descriptor_offset_set (&se->pre, new_desc,
! 						  gfc_index_zero_node);
! 		  gfc_conv_descriptor_span_set (&se->pre, new_desc,
! 						gfc_conv_descriptor_span_get
! 						(old_desc));
! 		  gfc_add_modify (&se->pre, stride, gfc_index_one_node);
! 
! 		  gfc_init_block (&loop_body);
! 
! 		  old_field = gfc_conv_descriptor_lbound_get (old_desc, idx);
! 		  gfc_conv_descriptor_lbound_set (&loop_body, new_desc, idx,
! 						  old_field);
! 
! 		  old_field = gfc_conv_descriptor_ubound_get (old_desc, idx);
! 		  gfc_conv_descriptor_ubound_set (&loop_body, new_desc, idx,
! 						  old_field);
! 
! 		  gfc_conv_descriptor_stride_set (&loop_body, new_desc, idx,
! 						  stride);
! 
! 		  tree offset = fold_build2_loc (input_location, MULT_EXPR,
! 						 gfc_array_index_type, stride,
! 						 gfc_conv_descriptor_lbound_get
! 						 (new_desc, idx));
! 		  offset = fold_build2_loc (input_location, MINUS_EXPR,
! 					    gfc_array_index_type,
! 					    gfc_conv_descriptor_offset_get
! 					    (new_desc), offset);
! 		  gfc_conv_descriptor_offset_set (&loop_body, new_desc, offset);
! 
! 		  tree extent = gfc_conv_array_extent_dim
! 				(gfc_conv_descriptor_lbound_get (new_desc, idx),
! 				 gfc_conv_descriptor_ubound_get (new_desc, idx),
! 				 NULL);
! 		  extent = fold_build2_loc (input_location, MULT_EXPR,
! 					    gfc_array_index_type, stride,
! 					    extent);
! 		  gfc_add_modify (&loop_body, stride, extent);
! 
! 		  gfc_simple_for_loop (&se->pre, idx,
! 				       build_int_cst (TREE_TYPE (idx), 0),
! 				       gfc_conv_descriptor_rank (old_desc),
! 				       LT_EXPR,
! 				       build_int_cst (TREE_TYPE (idx), 1),
! 				       gfc_finish_block (&loop_body));
! 		}
! 	      else
  		{
! 		  /* The original descriptor has transposed dims so we can't
! 		     reuse it directly; we have to create a new one.  */
! 		  old_field = gfc_conv_descriptor_offset_get (old_desc);
! 		  gfc_conv_descriptor_offset_set (&se->pre, new_desc, old_field);
! 
! 		  for (int i = 0; i < expr->rank; i++)
! 		    {
! 		      old_field = gfc_conv_descriptor_dimension (old_desc,
  			gfc_rank_cst[get_array_ref_dim_for_loop_dim (ss, i)]);
! 		      new_field = gfc_conv_descriptor_dimension (new_desc,
  			gfc_rank_cst[i]);
! 		      gfc_add_modify (&se->pre, new_field, old_field);
! 		    }
  		}
  
  	      if (flag_coarray == GFC_FCOARRAY_LIB
diff -Nrcpad gcc-14-20260410/gcc/fortran/trans-decl.cc gcc-14-20260417/gcc/fortran/trans-decl.cc
*** gcc-14-20260410/gcc/fortran/trans-decl.cc	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/trans-decl.cc	Fri Apr 17 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 49,54 ****
--- 49,55 ----
  #include "omp-general.h"
  #include "attr-fnspec.h"
  #include "tree-iterator.h"
+ #include "dependency.h"
  
  #define MAX_LABEL_VALUE 99999
  
*************** gfc_allocate_lang_decl (tree decl)
*** 832,837 ****
--- 833,851 ----
      DECL_LANG_SPECIFIC (decl) = ggc_cleared_alloc<struct lang_decl> ();
  }
  
+ 
+ /* Determine order of two symbol declarations.  */
+ 
+ static bool
+ decl_order (gfc_symbol *sym1, gfc_symbol *sym2)
+ {
+   if (sym1->decl_order > sym2->decl_order)
+     return true;
+   else
+     return false;
+ }
+ 
+ 
  /* Remember a symbol to generate initialization/cleanup code at function
     entry/exit.  */
  
*************** gfc_defer_symbol_init (gfc_symbol * sym)
*** 849,866 ****
    last = head = sym->ns->proc_name;
    p = last->tlink;
  
    /* Make sure that setup code for dummy variables which are used in the
       setup of other variables is generated first.  */
    if (sym->attr.dummy)
      {
        /* Find the first dummy arg seen after us, or the first non-dummy arg.
!          This is a circular list, so don't go past the head.  */
        while (p != head
!              && (!p->attr.dummy || p->dummy_order > sym->dummy_order))
!         {
!           last = p;
!           p = p->tlink;
!         }
      }
    /* Insert in between last and p.  */
    last->tlink = sym;
--- 863,896 ----
    last = head = sym->ns->proc_name;
    p = last->tlink;
  
+   gfc_function_dependency (sym, head);
+ 
    /* Make sure that setup code for dummy variables which are used in the
       setup of other variables is generated first.  */
    if (sym->attr.dummy)
      {
        /* Find the first dummy arg seen after us, or the first non-dummy arg.
! 	 This is a circular list, so don't go past the head.  */
        while (p != head
! 	     && (!p->attr.dummy || decl_order (p, sym)))
! 	{
! 	  last = p;
! 	  p = p->tlink;
! 	}
!     }
!   else if (sym->fn_result_dep)
!     {
!       /* In the case of non-dummy symbols with dependencies on an old-fashioned
!      function result (ie. proc_name = proc_name->result), make sure that the
!      order in the tlink chain is such that the code appears in declaration
!      order. This ensures that mutual dependencies between these symbols are
!      respected.  */
!       while (p != head
! 	     && (!p->attr.result || decl_order (sym, p)))
! 	{
! 	  last = p;
! 	  p = p->tlink;
! 	}
      }
    /* Insert in between last and p.  */
    last->tlink = sym;
*************** gfc_trans_auto_character_variable (gfc_s
*** 4189,4200 ****
--- 4219,4237 ----
    stmtblock_t init;
    tree decl;
    tree tmp;
+   bool back;
  
    gcc_assert (sym->backend_decl);
    gcc_assert (sym->ts.u.cl && sym->ts.u.cl->length);
  
    gfc_init_block (&init);
  
+   /* In the case of non-dummy symbols with dependencies on an old-fashioned
+      function result (ie. proc_name = proc_name->result), gfc_add_init_cleanup
+      must be called with the last, optional argument false so that the process
+      ing of the character length occurs after the processing of the result.  */
+   back = sym->fn_result_dep;
+ 
    /* Evaluate the string length expression.  */
    gfc_conv_string_length (sym->ts.u.cl, NULL, &init);
  
*************** gfc_trans_auto_character_variable (gfc_s
*** 4207,4213 ****
    tmp = fold_build1_loc (input_location, DECL_EXPR, TREE_TYPE (decl), decl);
    gfc_add_expr_to_block (&init, tmp);
  
!   gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE);
  }
  
  /* Set the initial value of ASSIGN statement auxiliary variable explicitly.  */
--- 4244,4250 ----
    tmp = fold_build1_loc (input_location, DECL_EXPR, TREE_TYPE (decl), decl);
    gfc_add_expr_to_block (&init, tmp);
  
!   gfc_add_init_cleanup (block, gfc_finish_block (&init), NULL_TREE, back);
  }
  
  /* Set the initial value of ASSIGN statement auxiliary variable explicitly.  */
*************** init_intent_out_dt (gfc_symbol * proc_sy
*** 4379,4385 ****
    tree tmp;
    tree present;
    gfc_symbol *s;
-   bool dealloc_with_value = false;
  
    gfc_init_block (&init);
    for (f = gfc_sym_get_dummy_args (proc_sym); f; f = f->next)
--- 4416,4421 ----
*************** init_intent_out_dt (gfc_symbol * proc_sy
*** 4410,4421 ****
  	   by the caller.  */
  	if (tmp == NULL_TREE && !s->attr.allocatable
  	    && s->ts.u.derived->attr.alloc_comp)
! 	  {
! 	    tmp = gfc_deallocate_alloc_comp (s->ts.u.derived,
! 					     s->backend_decl,
! 					     s->as ? s->as->rank : 0);
! 	    dealloc_with_value = s->value;
! 	  }
  
  	if (tmp != NULL_TREE && (s->attr.optional
  				 || s->ns->proc_name->attr.entry_master))
--- 4446,4454 ----
  	   by the caller.  */
  	if (tmp == NULL_TREE && !s->attr.allocatable
  	    && s->ts.u.derived->attr.alloc_comp)
! 	  tmp = gfc_deallocate_alloc_comp (s->ts.u.derived,
! 					   s->backend_decl,
! 					   s->as ? s->as->rank : 0);
  
  	if (tmp != NULL_TREE && (s->attr.optional
  				 || s->ns->proc_name->attr.entry_master))
*************** init_intent_out_dt (gfc_symbol * proc_sy
*** 4425,4438 ****
  			      present, tmp, build_empty_stmt (input_location));
  	  }
  
! 	if (tmp != NULL_TREE && !dealloc_with_value)
! 	  gfc_add_expr_to_block (&init, tmp);
! 	else if (s->value && !s->attr.allocatable)
! 	  {
! 	    gfc_add_expr_to_block (&init, tmp);
! 	    gfc_init_default_dt (s, &init, false);
! 	    dealloc_with_value = false;
! 	  }
        }
      else if (f->sym && f->sym->attr.intent == INTENT_OUT
  	     && f->sym->ts.type == BT_CLASS
--- 4458,4466 ----
  			      present, tmp, build_empty_stmt (input_location));
  	  }
  
! 	gfc_add_expr_to_block (&init, tmp);
! 	if (s->value && !s->attr.allocatable)
! 	  gfc_init_default_dt (s, &init, false);
        }
      else if (f->sym && f->sym->attr.intent == INTENT_OUT
  	     && f->sym->ts.type == BT_CLASS
diff -Nrcpad gcc-14-20260410/gcc/fortran/trans-expr.cc gcc-14-20260417/gcc/fortran/trans-expr.cc
*** gcc-14-20260410/gcc/fortran/trans-expr.cc	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/trans-expr.cc	Fri Apr 17 22:32:07 2026
*************** gfc_get_interface_mapping_charlen (gfc_i
*** 4449,4461 ****
  
  /* A subroutine of gfc_add_interface_mapping.  Return a descriptorless
     array variable that can be used as the actual argument for dummy
!    argument SYM.  Add any initialization code to BLOCK.  PACKED is as
!    for gfc_get_nodesc_array_type and DATA points to the first element
!    in the passed array.  */
  
  static tree
  gfc_get_interface_mapping_array (stmtblock_t * block, gfc_symbol * sym,
! 				 gfc_packed packed, tree data, tree len)
  {
    tree type;
    tree var;
--- 4449,4463 ----
  
  /* A subroutine of gfc_add_interface_mapping.  Return a descriptorless
     array variable that can be used as the actual argument for dummy
!    argument SYM, except in the case of assumed rank dummies of
!    non-intrinsic functions where the descriptor must be passed. Add any
!    initialization code to BLOCK. PACKED is as for gfc_get_nodesc_array_type
!    and DATA points to the first element in the passed array.  */
  
  static tree
  gfc_get_interface_mapping_array (stmtblock_t * block, gfc_symbol * sym,
! 				 gfc_packed packed, tree data, tree len,
! 				 bool assumed_rank_formal)
  {
    tree type;
    tree var;
*************** gfc_get_interface_mapping_array (stmtblo
*** 4464,4470 ****
      type = gfc_get_character_type_len (sym->ts.kind, len);
    else
      type = gfc_typenode_for_spec (&sym->ts);
!   type = gfc_get_nodesc_array_type (type, sym->as, packed,
  				    !sym->attr.target && !sym->attr.pointer
  				    && !sym->attr.proc_pointer);
  
--- 4466,4476 ----
      type = gfc_get_character_type_len (sym->ts.kind, len);
    else
      type = gfc_typenode_for_spec (&sym->ts);
! 
!   if (assumed_rank_formal)
!     type = TREE_TYPE (data);
!   else
!     type = gfc_get_nodesc_array_type (type, sym->as, packed,
  				    !sym->attr.target && !sym->attr.pointer
  				    && !sym->attr.proc_pointer);
  
*************** gfc_add_interface_mapping (gfc_interface
*** 4551,4556 ****
--- 4557,4563 ----
    new_sym->attr.allocatable = sym->attr.allocatable;
    new_sym->attr.flavor = sym->attr.flavor;
    new_sym->attr.function = sym->attr.function;
+   new_sym->attr.dummy = 0;
  
    /* Ensure that the interface is available and that
       descriptors are passed for array actual arguments.  */
*************** gfc_add_interface_mapping (gfc_interface
*** 4637,4651 ****
    else if (POINTER_TYPE_P (TREE_TYPE (se->expr))
  	   && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (se->expr))))
      {
        /* Get the actual argument's descriptor.  */
        desc = build_fold_indirect_ref_loc (input_location,
  				      se->expr);
  
        /* Create the replacement variable.  */
!       tmp = gfc_conv_descriptor_data_get (desc);
        value = gfc_get_interface_mapping_array (&se->pre, sym,
  					       PACKED_NO, tmp,
! 					       se->string_length);
  
        /* Use DESC to work out the upper bounds, strides and offset.  */
        gfc_set_interface_mapping_bounds (&se->pre, TREE_TYPE (value), desc);
--- 4644,4670 ----
    else if (POINTER_TYPE_P (TREE_TYPE (se->expr))
  	   && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (se->expr))))
      {
+       bool assumed_rank_formal = false;
+ 
        /* Get the actual argument's descriptor.  */
        desc = build_fold_indirect_ref_loc (input_location,
  				      se->expr);
  
        /* Create the replacement variable.  */
!       if (sym->as && sym->as->type == AS_ASSUMED_RANK
! 	  && !(sym->ns && sym->ns->proc_name
! 	       && sym->ns->proc_name->attr.proc == PROC_INTRINSIC))
! 	{
! 	  assumed_rank_formal = true;
! 	  tmp = desc;
! 	}
!       else
! 	tmp = gfc_conv_descriptor_data_get (desc);
! 
        value = gfc_get_interface_mapping_array (&se->pre, sym,
  					       PACKED_NO, tmp,
! 					       se->string_length,
! 					       assumed_rank_formal);
  
        /* Use DESC to work out the upper bounds, strides and offset.  */
        gfc_set_interface_mapping_bounds (&se->pre, TREE_TYPE (value), desc);
*************** gfc_add_interface_mapping (gfc_interface
*** 4654,4660 ****
      /* Otherwise we have a packed array.  */
      value = gfc_get_interface_mapping_array (&se->pre, sym,
  					     PACKED_FULL, se->expr,
! 					     se->string_length);
  
    new_sym->backend_decl = value;
  }
--- 4673,4680 ----
      /* Otherwise we have a packed array.  */
      value = gfc_get_interface_mapping_array (&se->pre, sym,
  					     PACKED_FULL, se->expr,
! 					     se->string_length,
! 					     false);
  
    new_sym->backend_decl = value;
  }
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 7232,7237 ****
--- 7252,7289 ----
  					     : &parmse.pre;
  	      gfc_add_block_to_block (class_pre_block, &class_se.pre);
  	      gfc_add_block_to_block (&parmse.post, &class_se.post);
+ 
+ 	      if (e->expr_type == EXPR_OP
+ 		  && POINTER_TYPE_P (TREE_TYPE (parmse.expr))
+ 		  && GFC_CLASS_TYPE_P (TREE_TYPE (TREE_OPERAND (parmse.expr, 0))))
+ 		{
+ 		  tree cond;
+ 		  tree dealloc_expr = gfc_finish_block (&parmse.post);
+ 		  tmp = TREE_OPERAND (parmse.expr, 0);
+ 		  gfc_init_block (&parmse.post);
+ 		  cond = gfc_class_data_get (tmp);
+ 		  tmp = gfc_deallocate_alloc_comp_no_caf (e->ts.u.derived,
+ 							  tmp, e->rank, true);
+ 		  gfc_add_expr_to_block (&parmse.post, tmp);
+ 		  cond = gfc_class_data_get (TREE_OPERAND (parmse.expr, 0));
+ 		  cond = gfc_conv_descriptor_data_get (cond);
+ 		  cond = fold_build2_loc (input_location, NE_EXPR,
+ 					  logical_type_node, cond,
+ 					  build_int_cst (TREE_TYPE (cond), 0));
+ 		  tmp = build3_v (COND_EXPR, cond, dealloc_expr,
+ 				  build_empty_stmt (input_location));
+ 
+ 		  /* This specific case should not be processed further and so
+ 		     bundle everything up and proceed to the next argument.  */
+ 		  if (fsym && need_interface_mapping && e)
+ 		    gfc_add_interface_mapping (&mapping, fsym, &parmse, e);
+ 		  gfc_add_expr_to_block (&parmse.post, tmp);
+ 		  gfc_add_block_to_block (&se->pre, &parmse.pre);
+ 		  gfc_add_block_to_block (&post, &parmse.post);
+ 		  gfc_add_block_to_block (&se->finalblock, &parmse.finalblock);
+ 		  vec_safe_push (arglist, parmse.expr);
+ 		  continue;
+ 		}
  	    }
  	  else
  	    {
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 7353,7359 ****
  		       && (fsym->attr.target
  			   ? gfc_is_not_contiguous (e)
  			   : !gfc_is_simply_contiguous (e, false, true))
! 		       && gfc_expr_is_variable (e))
  		{
  		  gfc_conv_subref_array_arg (&parmse, e, nodesc_arg,
  					     fsym->attr.intent,
--- 7405,7412 ----
  		       && (fsym->attr.target
  			   ? gfc_is_not_contiguous (e)
  			   : !gfc_is_simply_contiguous (e, false, true))
! 		       && gfc_expr_is_variable (e)
! 		       && e->rank != -1)
  		{
  		  gfc_conv_subref_array_arg (&parmse, e, nodesc_arg,
  					     fsym->attr.intent,
diff -Nrcpad gcc-14-20260410/gcc/fortran/trans.cc gcc-14-20260417/gcc/fortran/trans.cc
*** gcc-14-20260410/gcc/fortran/trans.cc	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/trans.cc	Fri Apr 17 22:32:07 2026
*************** gfc_start_wrapped_block (gfc_wrapped_blo
*** 2803,2816 ****
  /* Add a new pair of initializers/clean-up code.  */
  
  void
! gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup)
  {
    gcc_assert (block);
  
    /* The new pair of init/cleanup should be "wrapped around" the existing
       block of code, thus the initialization is added to the front and the
       cleanup to the back.  */
!   add_expr_to_chain (&block->init, init, true);
    add_expr_to_chain (&block->cleanup, cleanup, false);
  }
  
--- 2803,2817 ----
  /* Add a new pair of initializers/clean-up code.  */
  
  void
! gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup,
! 		      bool back)
  {
    gcc_assert (block);
  
    /* The new pair of init/cleanup should be "wrapped around" the existing
       block of code, thus the initialization is added to the front and the
       cleanup to the back.  */
!   add_expr_to_chain (&block->init, init, !back);
    add_expr_to_chain (&block->cleanup, cleanup, false);
  }
  
diff -Nrcpad gcc-14-20260410/gcc/fortran/trans.h gcc-14-20260417/gcc/fortran/trans.h
*** gcc-14-20260410/gcc/fortran/trans.h	Fri Apr 10 22:32:07 2026
--- gcc-14-20260417/gcc/fortran/trans.h	Fri Apr 17 22:32:07 2026
*************** void gfc_conv_class_to_class (gfc_se *,
*** 471,477 ****
  void gfc_start_wrapped_block (gfc_wrapped_block* block, tree code);
  /* Add a pair of init/cleanup code to the block.  Each one might be a
     NULL_TREE if not required.  */
! void gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup);
  /* Finalize the block, that is, create a single expression encapsulating the
     original code together with init and clean-up code.  */
  tree gfc_finish_wrapped_block (gfc_wrapped_block* block);
--- 471,478 ----
  void gfc_start_wrapped_block (gfc_wrapped_block* block, tree code);
  /* Add a pair of init/cleanup code to the block.  Each one might be a
     NULL_TREE if not required.  */
! void gfc_add_init_cleanup (gfc_wrapped_block* block, tree init, tree cleanup,
! 			   bool back = false);
  /* Finalize the block, that is, create a single expression encapsulating the
     original code together with init and clean-up code.  */
  tree gfc_finish_wrapped_block (gfc_wrapped_block* block);
diff -Nrcpad gcc-14-20260410/gcc/testsuite/ChangeLog gcc-14-20260417/gcc/testsuite/ChangeLog
*** gcc-14-20260410/gcc/testsuite/ChangeLog	Fri Apr 10 22:32:08 2026
--- gcc-14-20260417/gcc/testsuite/ChangeLog	Fri Apr 17 22:32:08 2026
***************
*** 1,3 ****
--- 1,50 ----
+ 2026-04-14  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.
+ 
+ 2026-04-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 	    Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/124751
+ 	* gfortran.dg/pr100194.f90: Run the testcase and add runtime
+ 	coverage for packed assumed-rank sections.
+ 
+ 2026-04-14  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-01  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/100194
+ 	* gfortran.dg/pr100194.f90: New test.
+ 
+ 2026-04-13  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	Backported from master:
+ 	2026-03-11  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	PR target/123271
+ 	* gcc.target/arm/pr123271.c: New test.
+ 
+ 2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-03-30  Christopher Albert  <albert@tugraz.at>
+ 
+ 	* gfortran.dg/goacc/omp-108382.f90: New test.
+ 
+ 2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	Backported from master:
+ 	2026-04-13  Christopher Albert  <albert@tugraz.at>
+ 
+ 	PR fortran/95879
+ 	PR fortran/95879
+ 	* gfortran.dg/pr95879.f90: New test.
+ 
  2026-04-09  Xi Ruoyao  <xry111@xry111.site>
  
  	Backported from master:
diff -Nrcpad gcc-14-20260410/gcc/testsuite/gcc.target/arm/pr123271.c gcc-14-20260417/gcc/testsuite/gcc.target/arm/pr123271.c
*** gcc-14-20260410/gcc/testsuite/gcc.target/arm/pr123271.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20260417/gcc/testsuite/gcc.target/arm/pr123271.c	Fri Apr 17 22:32:11 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-options "-O2 -ftrapv" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ int sub(int a, int b)
+ {
+   return a - b;
+ }
+ 
+ /*
+ ** sub:
+ ** ...
+ ** (
+ **	bl	__subvsi3
+ ** |
+    Not generated yet, but would be equally acceptable.
+ **	subs	r0, r0, r1
+ **	bv[sc]	.*
+ ** )
+ ** ...
+ */
diff -Nrcpad gcc-14-20260410/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90 gcc-14-20260417/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90
*** gcc-14-20260410/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90	Thu Jan  1 00:00:00 1970
--- gcc-14-20260417/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90	Fri Apr 17 22:32:14 2026
***************
*** 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-14-20260410/gcc/testsuite/gfortran.dg/dependent_decls_2.f90 gcc-14-20260417/gcc/testsuite/gfortran.dg/dependent_decls_2.f90
*** gcc-14-20260410/gcc/testsuite/gfortran.dg/dependent_decls_2.f90	Thu Jan  1 00:00:00 1970
--- gcc-14-20260417/gcc/testsuite/gfortran.dg/dependent_decls_2.f90	Fri Apr 17 22:32:14 2026
***************
*** 0 ****
--- 1,89 ----
+ ! { dg-do run }
+ !
+ ! Fix for PR59104 in which the dependence on the old style function result
+ ! was not taken into account in the ordering of auto array allocation and
+ ! characters with dependent lengths.
+ !
+ ! Contributed by Tobias Burnus  <burnus@gcc.gnu.org>
+ !
+ module m
+    implicit none
+    integer, parameter :: dp = kind([double precision::])
+    contains
+       function f(x)
+          integer, intent(in) :: x
+          real(dp) f(x/2)
+          real(dp) g(x/2)
+          integer y(size (f)+1)              ! This was the original problem
+          integer z(size (f) + size (y))     ! Found in development of the fix
+          integer w(size (f) + size (y) + x) ! Check dummy is OK
+          integer :: l1(size(y))
+          integer :: l2(size(z))
+          integer :: l3(size(w))
+          f = 10.0
+          y = 1                              ! Stop -Wall from complaining
+          z = 1; g = 1; w = 1; l1 = 1; l2 = 1; l3 = 1
+          if (size (f) .ne. 1) stop 1
+          if (size (g) .ne. 1) stop 2
+          if (size (y) .ne. 2) stop 3
+          if (size (z) .ne. 3) stop 4
+          if (size (w) .ne. 5) stop 5
+          if (size (l1) .ne. 2) stop 6       ! Check indirect dependencies
+          if (size (l2) .ne. 3) stop 7
+          if (size (l3) .ne. 5) stop 8
+ 
+       end function f
+       function e(x) result(f)
+          integer, intent(in) :: x
+          real(dp) f(x/2)
+          real(dp) g(x/2)
+          integer y(size (f)+1)
+          integer z(size (f) + size (y))     ! As was this.
+          integer w(size (f) + size (y) + x)
+          integer :: l1(size(y))
+          integer :: l2(size(z))
+          integer :: l3(size(w))
+          f = 10.0
+          y = 1; z = 1; g = 1; w = 1; l1 = 1; l2 = 1; l3 = 1
+          if (size (f) .ne. 2) stop 9
+          if (size (g) .ne. 2) stop 10
+          if (size (y) .ne. 3) stop 11
+          if (size (z) .ne. 5) stop 12
+          if (size (w) .ne. 9) stop 13
+          if (size (l1) .ne. 3) stop 14      ! Check indirect dependencies
+          if (size (l2) .ne. 5) stop 15
+          if (size (l3) .ne. 9) stop 16
+       end function
+       function d(x)  ! After fixes to arrays, what was needed was known!
+         integer, intent(in) :: x
+         character(len = x/2) :: d
+         character(len = len (d)) :: line
+         character(len = len (d) + len (line)) :: line2
+         character(len = len (d) + len (line) + x) :: line3
+ ! Commented out lines give implicit type warnings with gfortran and nagfor
+ !        character(len = len (d)) :: line4 (len (line3))
+         character(len = len (line3)) :: line4 (len (line3))
+ !        character(len = size(len4, 1)) :: line5
+         line = repeat ("a", len (d))
+         line2 = repeat ("b", x)
+         line3 = repeat ("c", len (line3))
+         if (len (line2) .ne. x) stop 17
+         if (line3 .ne. "cccccccc") stop 18
+         d = line
+         line4 = line3
+         if (size (line4) .ne. 8) stop 19
+         if (any (line4 .ne. "cccccccc")) stop 20
+       end
+ end module m
+ 
+ program p
+    use m
+    implicit none
+    real(dp) y
+ 
+    y = sum (f (2))
+    if (int (y) .ne. 10) stop 21
+    y = sum (e (4))
+    if (int (y) .ne. 20) stop 22
+    if (d (4) .ne. "aa") stop 23
+ end program p
diff -Nrcpad gcc-14-20260410/gcc/testsuite/gfortran.dg/dependent_decls_3.f90 gcc-14-20260417/gcc/testsuite/gfortran.dg/dependent_decls_3.f90
*** gcc-14-20260410/gcc/testsuite/gfortran.dg/dependent_decls_3.f90	Thu Jan  1 00:00:00 1970
--- gcc-14-20260417/gcc/testsuite/gfortran.dg/dependent_decls_3.f90	Fri Apr 17 22:32:14 2026
***************
*** 0 ****
--- 1,26 ----
+ ! { dg-do run }
+ !
+ ! Fix a regression caused by the fix for PR59104.
+ !
+ ! Contributed by Harald Anlauf  <anlauf@gcc.gnu.org>
+ !
+ program p
+   implicit none
+   integer, parameter :: nx = 64, ny = 32
+   real               :: x(nx,ny), s(nx/2,ny), d(nx/2,ny)
+ 
+   s = 0.0
+   d = 0.0
+   call sub (x,s,d)
+   if (sum(s) .ne. 256) stop 1
+   if (sum(d) .ne. 256) stop 2  ! Stopped with sum(d) == 0.
+ contains
+   subroutine sub  (v, w, d)
+     real, intent(in)  :: v(:,:)
+     real, intent(out), dimension (size (v,dim=1)/4,size (v,dim=2)/2) :: w, d
+     w = 1.0
+     d = 1.0
+     if (any (shape (w) .ne. [nx/4, ny/2])) stop 3
+     if (any (shape (d) .ne. [nx/4, ny/2])) print *, shape (d)  ! Printed "0 0" here
+   end subroutine sub
+ end
diff -Nrcpad gcc-14-20260410/gcc/testsuite/gfortran.dg/derived_init_7.f90 gcc-14-20260417/gcc/testsuite/gfortran.dg/derived_init_7.f90
*** gcc-14-20260410/gcc/testsuite/gfortran.dg/derived_init_7.f90	Thu Jan  1 00:00:00 1970
--- gcc-14-20260417/gcc/testsuite/gfortran.dg/derived_init_7.f90	Fri Apr 17 22:32:14 2026
***************
*** 0 ****
--- 1,58 ----
+ ! { dg-do run }
+ ! Check that finalizable intent(out) dummy arguments are first finalized
+ ! and then correctly default-initialized (PR116829)
+ !
+ ! Contributed by Tomas Trnka  <trnka@scm.com>
+ !
+ module FinalizableIntentOutTestModule
+    implicit none
+ 
+    type :: AapType
+       integer  :: i = 0
+    contains
+       final    :: Finalizer
+    end type
+    integer :: ctr = 0
+    logical :: err1 = .false.
+    logical :: err2 = .false.
+ contains
+ 
+    subroutine Finalizer(self)
+       type(AapType), intent(inout) :: self
+ 
+       ! Fail if Finalizer gets called again on an already finalized object
+       if (self%i == 42) err1 = .true.
+ 
+       self%i = 42 ! Nobody should ever see this value after finalization
+       ctr = ctr + 1
+    end subroutine
+ 
+ end module
+ 
+ 
+ program test
+    use FinalizableIntentOutTestModule
+ 
+    implicit none
+ 
+    type(AapType) :: aap
+ 
+    ! Set "i" to nonzero so that initialization in MakeAap has something to do
+    aap%i = 1
+ 
+    call MakeAap(aap)
+    
+    if (err1) stop 1
+    if (err2) stop 2      ! This was failing
+    if (ctr /= 1) stop 3  ! Belt and braces to ensure number of final calls correct.
+ 
+ contains
+ 
+    subroutine MakeAap(a)
+       type(AapType), intent(out) :: a
+ 
+       ! Fail if "a" wasn't initialized properly
+       if (a%i /= 0)  err2 = .true.
+    end subroutine
+ 
+ end program
diff -Nrcpad gcc-14-20260410/gcc/testsuite/gfortran.dg/goacc/omp-108382.f90 gcc-14-20260417/gcc/testsuite/gfortran.dg/goacc/omp-108382.f90
*** gcc-14-20260410/gcc/testsuite/gfortran.dg/goacc/omp-108382.f90	Thu Jan  1 00:00:00 1970
--- gcc-14-20260417/gcc/testsuite/gfortran.dg/goacc/omp-108382.f90	Fri Apr 17 22:32:14 2026
***************
*** 0 ****
--- 1,22 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-fopenmp" }
+ 
+ module m_108382_a
+   implicit none
+   integer :: x, y
+ 
+ !$acc declare copyin(x, &
+ !$acc   y)
+ !$omp declare target(x, &
+ !$omp   y)
+ end module m_108382_a
+ 
+ module m_108382_b
+   implicit none
+   integer :: x, y
+ 
+ !$omp declare target(x, &
+ !$omp   y)
+ !$acc declare copyin(x, &
+ !$acc   y)
+ end module m_108382_b
diff -Nrcpad gcc-14-20260410/gcc/testsuite/gfortran.dg/pr100155.f90 gcc-14-20260417/gcc/testsuite/gfortran.dg/pr100155.f90
*** gcc-14-20260410/gcc/testsuite/gfortran.dg/pr100155.f90	Thu Jan  1 00:00:00 1970
--- gcc-14-20260417/gcc/testsuite/gfortran.dg/pr100155.f90	Fri Apr 17 22:32:14 2026
***************
*** 0 ****
--- 1,43 ----
+ ! { dg-do run }
+ ! Test the fix for PR100155 in which the parentheses caused an ICE
+ ! in evaluation the specification expression for 'z'. Note that the
+ ! recursive attribute is not a factor in the ICE (see PR105168).
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ module m1
+    type t
+      integer, allocatable :: i
+    end type
+    integer :: ctr = 0, vals = 0
+    integer, parameter :: no_calls = 6
+ contains
+    recursive function f(x) result(z)
+       class(t) :: x(:)
+       type(t) :: z(size(x)+1)
+       class(t), allocatable :: a(:)
+       type(t), allocatable :: b(:)
+       ctr = ctr + 1
+       allocate (t :: a(1))
+       a(1)%i = ctr
+       if (ctr <= no_calls - 1) then
+           b = f((a)) ! <== parentheses
+       else
+           allocate (b(a(1)%i))
+           b(1)%i = ctr
+       end if
+       vals = vals + b(1)%i
+       z(1) = t(b(1)%i)
+    end 
+ end module m1
+ 
+   use m1
+   type (t) :: dummy(1)
+   type(t), allocatable :: res(:)
+   dummy = t(1)
+   res = f (dummy);
+   if (ctr /= no_calls) stop 1
+   if (vals /= (2 * sum ([(i, i = 1, no_calls)]) - no_calls)) stop 2
+   if (size (res) /= 2) stop 3
+   deallocate (res)
+   deallocate (dummy(1)%i)
+ end
diff -Nrcpad gcc-14-20260410/gcc/testsuite/gfortran.dg/pr100194.f90 gcc-14-20260417/gcc/testsuite/gfortran.dg/pr100194.f90
*** gcc-14-20260410/gcc/testsuite/gfortran.dg/pr100194.f90	Thu Jan  1 00:00:00 1970
--- gcc-14-20260417/gcc/testsuite/gfortran.dg/pr100194.f90	Fri Apr 17 22:32:14 2026
***************
*** 0 ****
--- 1,98 ----
+ ! { dg-do run }
+ !
+ ! PR fortran/100194
+ ! ICE in gfc_trans_create_temp_array when passing a non-contiguous
+ ! assumed-rank array to a contiguous assumed-rank dummy argument.
+ !
+ ! Contributed by Martin Diehl <m.diehl@kit.edu>
+ 
+ subroutine s(x)
+    real :: x(..)
+    call t(x)
+ contains
+    subroutine t(y)
+       real, contiguous :: y(..)
+    end
+ end
+ 
+ ! The following from the PR, these compiled OK before the patch.
+ !
+ ! Contributed by G. Steinmetz <gscfq@t-online.de>
+ 
+ subroutine z3(x)
+    real, contiguous :: x(..)
+    call t(x)
+ contains
+    subroutine t(y)
+       real, contiguous :: y(..)
+    end
+ end
+ 
+ subroutine z2(x)
+    real, contiguous :: x(..)
+    call t(x)
+ contains
+    subroutine t(y)
+       real :: y(..)
+    end
+ end
+ 
+ ! Runtime follow-up from Paul Thomas <pault@gcc.gnu.org>.
+ 
+ program p
+   implicit none
+   interface
+     subroutine pr100194_runtime(x, res)
+       integer :: x(..)
+       integer, allocatable :: res(:)
+     end subroutine pr100194_runtime
+   end interface
+ 
+   type :: ty
+     character(4) :: chr
+     integer :: r(2)
+   end type ty
+ 
+   integer :: x(4) = [42, 84, 126, 168]
+   type(ty) :: y = ty("abcd", [42, 84])
+   integer, allocatable :: z(:)
+   integer, allocatable :: u(:, :)
+ 
+   u = reshape ([x, 4 * x, 16 * x, 64 * x], [4, 4])
+ 
+   call pr100194_runtime(x, z)
+   if (any (z /= [84, 168, 252, 336])) stop 1
+ 
+   call pr100194_runtime(x(1:4:2), z)
+   if (any (z /= [84, 252])) stop 2
+ 
+   call pr100194_runtime(x([1, 3, 4, 2]), z)
+   if (any (z /= [84, 252, 336, 168])) stop 3
+ 
+   call pr100194_runtime(y%r, z)
+   if (any (z /= [84, 168])) stop 4
+ 
+   call pr100194_runtime(u(1, :), z)
+   if (any (z /= [84, 336, 1344, 5376])) stop 5
+ 
+   call pr100194_runtime(u(:, 1), z)
+   if (any (z /= [84, 168, 252, 336])) stop 6
+ end program p
+ 
+ subroutine pr100194_runtime(x, res)
+   integer :: x(..)
+   integer, allocatable :: res(:)
+ 
+   call t(x)
+ 
+ contains
+ 
+   subroutine t(y)
+     integer, contiguous :: y(..)
+ 
+     select rank (y)
+       rank (1)
+         res = 2 * y
+     end select
+   end subroutine t
+ end subroutine pr100194_runtime
diff -Nrcpad gcc-14-20260410/gcc/testsuite/gfortran.dg/pr102619.f90 gcc-14-20260417/gcc/testsuite/gfortran.dg/pr102619.f90
*** gcc-14-20260410/gcc/testsuite/gfortran.dg/pr102619.f90	Thu Jan  1 00:00:00 1970
--- gcc-14-20260417/gcc/testsuite/gfortran.dg/pr102619.f90	Fri Apr 17 22:32:14 2026
***************
*** 0 ****
--- 1,23 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR102619.
+ !
+ ! Contributed by Gerhard Steinmetz  <gscfq@t-online.de>
+ !
+ program p
+   implicit none
+   real :: w(2,3)
+   real, allocatable :: y(:)
+   y = h(w)                        ! Caused an ICE
+   if (size (y) /= product (shape (w))) stop 1
+   if (any (int (y) /= [1,2,3,4,5,6])) stop 2
+   deallocate (y)
+ contains
+   function h(x) result (g)
+     real :: x(..)
+     real :: g(product(shape(x)))
+     integer :: i
+     if (any (shape (x) /= shape (w))) stop 3
+     g = [(real(i),i=1,size(g))]
+   end
+ end
diff -Nrcpad gcc-14-20260410/gcc/testsuite/gfortran.dg/pr95879.f90 gcc-14-20260417/gcc/testsuite/gfortran.dg/pr95879.f90
*** gcc-14-20260410/gcc/testsuite/gfortran.dg/pr95879.f90	Thu Jan  1 00:00:00 1970
--- gcc-14-20260417/gcc/testsuite/gfortran.dg/pr95879.f90	Fri Apr 17 22:32:14 2026
***************
*** 0 ****
--- 1,30 ----
+ ! { dg-do compile }
+ ! { dg-options "-std=f2018" }
+ ! PR fortran/95879
+ ! Contributed by G. Steinmetz <gscfq@t-online.de>
+ !
+ ! Use-after-free in gfc_resolve_formal_arglist when a contained subroutine
+ ! has a statement function whose dummy argument name matches a symbol
+ ! replaced by gfc_fixup_sibling_symbols.
+ 
+ module m1
+ contains
+    integer function f(x) bind(c)
+       use iso_c_binding
+    contains
+       subroutine s
+          c_funloc(f) = x  ! { dg-warning "Obsolescent feature: Statement function" }
+       end
+    end
+ end
+ 
+ module m2
+ contains
+    integer function f(x)
+       use iso_c_binding
+    contains
+       subroutine s
+          c_funloc(f) = x  ! { dg-warning "Obsolescent feature: Statement function" }
+       end
+    end
+ end
