diff -Nrcpad gcc-15-20251025/LAST_UPDATED gcc-15-20251101/LAST_UPDATED
*** gcc-15-20251025/LAST_UPDATED	Sat Oct 25 22:33:38 2025
--- gcc-15-20251101/LAST_UPDATED	Sat Nov  1 22:35:54 2025
***************
*** 1 ****
! Obtained from git: releases/gcc-15 revision 2f881d81d613a52b57dab311f0eacc5da11bae7e
--- 1 ----
! Obtained from git: releases/gcc-15 revision 31d3f96b790c76df14e6328fd600d616ca969abd
diff -Nrcpad gcc-15-20251025/MD5SUMS gcc-15-20251101/MD5SUMS
*** gcc-15-20251025/MD5SUMS	Sat Oct 25 22:33:53 2025
--- gcc-15-20251101/MD5SUMS	Sat Nov  1 22:35:58 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-15-20251025.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-20251101.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
! ea051b902cf75b2111f363b5d9492541  LAST_UPDATED
  9d2cf5b58292c2e8b0804d3eafc2d6f3  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
--- 25,31 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! b326222fee5c778830abc77e48718f30  LAST_UPDATED
  9d2cf5b58292c2e8b0804d3eafc2d6f3  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 514,520 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! f305a2f987400eca3f9a17f7e3ac068d  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 514,520 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 7ad2f39375ff32db83429b5dd7ba7d15  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 551,557 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 097da98d9eec36a6ed6ee0769549a4ac  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
! 3533e29fc2c46fb9b07aed5b7e25d805  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** cab9211ac73c7480b9b4b45833e20d71  gcc/co
*** 3463,3469 ****
  35bb69e0b38657d068d103a2da1b8a16  gcc/config/aarch64/aarch64-sve-builtins-base.def
  cdcf6636402c3c91eb0010325542b491  gcc/config/aarch64/aarch64-sve-builtins-base.h
  1aedb1965774496622db16f56a477345  gcc/config/aarch64/aarch64-sve-builtins-functions.h
! 089932b501cb5cd94383201ef2002478  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
  88653955c7c15c0ac1d6f1bd1b827641  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
  e055c97bc39ff21701576ecf45b3a7a0  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
  14751aeef4937155819adeff3187a05d  gcc/config/aarch64/aarch64-sve-builtins-sme.def
--- 3463,3469 ----
  35bb69e0b38657d068d103a2da1b8a16  gcc/config/aarch64/aarch64-sve-builtins-base.def
  cdcf6636402c3c91eb0010325542b491  gcc/config/aarch64/aarch64-sve-builtins-base.h
  1aedb1965774496622db16f56a477345  gcc/config/aarch64/aarch64-sve-builtins-functions.h
! 4f52c837cf027999ea709c1cc977cb46  gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
  88653955c7c15c0ac1d6f1bd1b827641  gcc/config/aarch64/aarch64-sve-builtins-shapes.h
  e055c97bc39ff21701576ecf45b3a7a0  gcc/config/aarch64/aarch64-sve-builtins-sme.cc
  14751aeef4937155819adeff3187a05d  gcc/config/aarch64/aarch64-sve-builtins-sme.def
*************** e055c97bc39ff21701576ecf45b3a7a0  gcc/co
*** 3471,3479 ****
  d90362e92083076dd19c9edc16b0600a  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
  5249e3dd61e8bd70c85a23c5711f3ca2  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
  e2d80b89552da0c6b4cb6bede3b2e573  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
! a2efaa4e51687bf79e5c6b17969c3664  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
! 5ef25fd86c1c16a4a6fb3f74e12802b4  gcc/config/aarch64/aarch64-sve-builtins.h
  f8e53efb41228263faa63280df0a8217  gcc/config/aarch64/aarch64-sve.md
  eb380a954053a41e73e4f6bb1d3572c0  gcc/config/aarch64/aarch64-sve2.md
  94024dd904900fa001fc7e12778c2f22  gcc/config/aarch64/aarch64-sys-regs.def
--- 3471,3479 ----
  d90362e92083076dd19c9edc16b0600a  gcc/config/aarch64/aarch64-sve-builtins-sve2.cc
  5249e3dd61e8bd70c85a23c5711f3ca2  gcc/config/aarch64/aarch64-sve-builtins-sve2.def
  e2d80b89552da0c6b4cb6bede3b2e573  gcc/config/aarch64/aarch64-sve-builtins-sve2.h
! 19c8ef952a21e2a41069e31a34affccf  gcc/config/aarch64/aarch64-sve-builtins.cc
  30d08305d5bc784af521254aea449949  gcc/config/aarch64/aarch64-sve-builtins.def
! b5b754958fa1c772f3c6b9961de6bb8d  gcc/config/aarch64/aarch64-sve-builtins.h
  f8e53efb41228263faa63280df0a8217  gcc/config/aarch64/aarch64-sve.md
  eb380a954053a41e73e4f6bb1d3572c0  gcc/config/aarch64/aarch64-sve2.md
  94024dd904900fa001fc7e12778c2f22  gcc/config/aarch64/aarch64-sys-regs.def
*************** b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/co
*** 4202,4208 ****
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
  1f51de377d2201760580af4caad2f020  gcc/config/i386/i386.cc
  0150b759a527c67bf0c83ed700545456  gcc/config/i386/i386.h
! 6e1ac3f232e5d4071bac3e28ef6c1e9a  gcc/config/i386/i386.md
  5a3c6fa6266505bbc0789e269da6e250  gcc/config/i386/i386.opt
  56dd2039e03b3ae92142eb68be464b98  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
--- 4202,4208 ----
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
  1f51de377d2201760580af4caad2f020  gcc/config/i386/i386.cc
  0150b759a527c67bf0c83ed700545456  gcc/config/i386/i386.h
! 10bca545d2c5e7f3858f933cf484b24a  gcc/config/i386/i386.md
  5a3c6fa6266505bbc0789e269da6e250  gcc/config/i386/i386.opt
  56dd2039e03b3ae92142eb68be464b98  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
*************** c69ef27c10b319a5443289af516f40b8  gcc/co
*** 4412,4418 ****
  dfcc88ca848e0510d6a048cef812a984  gcc/config/loongarch/gnu-user.h
  0214c19eeeeb90d46d358333d5381814  gcc/config/loongarch/la464.md
  2da06c6340275c1c0670ab82a7252f77  gcc/config/loongarch/larchintrin.h
! b74eced053703973adb776263950adbe  gcc/config/loongarch/lasx.md
  64deba47bb6c4537af9a962db8e160d1  gcc/config/loongarch/lasxintrin.h
  a11605122c3f864d3527acf829c67179  gcc/config/loongarch/linux.h
  ac0512e8b259ed63d386edaa0457a5ad  gcc/config/loongarch/loongarch-builtins.cc
--- 4412,4418 ----
  dfcc88ca848e0510d6a048cef812a984  gcc/config/loongarch/gnu-user.h
  0214c19eeeeb90d46d358333d5381814  gcc/config/loongarch/la464.md
  2da06c6340275c1c0670ab82a7252f77  gcc/config/loongarch/larchintrin.h
! e5be4115abd71f4859a3a23ad94e5eb6  gcc/config/loongarch/lasx.md
  64deba47bb6c4537af9a962db8e160d1  gcc/config/loongarch/lasxintrin.h
  a11605122c3f864d3527acf829c67179  gcc/config/loongarch/linux.h
  ac0512e8b259ed63d386edaa0457a5ad  gcc/config/loongarch/loongarch-builtins.cc
*************** d3ad067b1fa15bbce42fd3cc4499966e  gcc/co
*** 4436,4451 ****
  688cd325dbeb853413435f029e712cb2  gcc/config/loongarch/loongarch-str.h
  a8cd9a4a3d712802475e91e0ec9a3274  gcc/config/loongarch/loongarch-target-attr.cc
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
! 31931a788e9d326da01f0dd879342a0e  gcc/config/loongarch/loongarch.cc
  cac7a4f19361731647870d2210078a9e  gcc/config/loongarch/loongarch.h
  ec46785efb7afdd2deb34ce71a037c59  gcc/config/loongarch/loongarch.md
  bcc951e237d5501fc2acd6ef3141724c  gcc/config/loongarch/loongarch.opt
  264f23ee79258ff82bda293d093dd06b  gcc/config/loongarch/loongarch.opt.urls
! a1ceaab52de5f1950f6c6b63c5a718ea  gcc/config/loongarch/lsx.md
  429434e5f1e9f9afc839f4409102d5ea  gcc/config/loongarch/lsxintrin.h
  5a232a75001e3db7ee3e491afdfae629  gcc/config/loongarch/musl.h
  e357122938174e9f48e1036cb67c8a21  gcc/config/loongarch/predicates.md
! 3d93d4fcfba1009a5c6603db8dbef8a0  gcc/config/loongarch/simd.md
  8dd632424d9d78f36a7f6de524c32142  gcc/config/loongarch/sync.md
  e2aad9f2fd1ee2a4668948f381da109c  gcc/config/loongarch/t-linux
  4143126e9ad08f12c1a4555c0f87948d  gcc/config/loongarch/t-loongarch
--- 4436,4451 ----
  688cd325dbeb853413435f029e712cb2  gcc/config/loongarch/loongarch-str.h
  a8cd9a4a3d712802475e91e0ec9a3274  gcc/config/loongarch/loongarch-target-attr.cc
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
! f8eb0862eadd81d0f73b545b6a7e51c7  gcc/config/loongarch/loongarch.cc
  cac7a4f19361731647870d2210078a9e  gcc/config/loongarch/loongarch.h
  ec46785efb7afdd2deb34ce71a037c59  gcc/config/loongarch/loongarch.md
  bcc951e237d5501fc2acd6ef3141724c  gcc/config/loongarch/loongarch.opt
  264f23ee79258ff82bda293d093dd06b  gcc/config/loongarch/loongarch.opt.urls
! 6450d22eb809ae622bc72b6e18e0f369  gcc/config/loongarch/lsx.md
  429434e5f1e9f9afc839f4409102d5ea  gcc/config/loongarch/lsxintrin.h
  5a232a75001e3db7ee3e491afdfae629  gcc/config/loongarch/musl.h
  e357122938174e9f48e1036cb67c8a21  gcc/config/loongarch/predicates.md
! bacceffa33a7cd1fb45dcbb3b455e482  gcc/config/loongarch/simd.md
  8dd632424d9d78f36a7f6de524c32142  gcc/config/loongarch/sync.md
  e2aad9f2fd1ee2a4668948f381da109c  gcc/config/loongarch/t-linux
  4143126e9ad08f12c1a4555c0f87948d  gcc/config/loongarch/t-loongarch
*************** f51037a9e437f8e9ce7215b2da5ad4e2  gcc/co
*** 4954,4960 ****
  9a0be0e3c4d4b0eec09eef7dee2a028a  gcc/config/riscv/riscv-vsetvl.cc
  16b7359c0b12895c0d7452fc89879a1a  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! f53db596db376c68fa0d254b5e2dbf1b  gcc/config/riscv/riscv.cc
  1153302a8d65cedebba8e1a3f67931b2  gcc/config/riscv/riscv.h
  e0f559ad59aa7daada8d2a405d8ea9d8  gcc/config/riscv/riscv.md
  c799356a57b52ab91ff324ab22516fba  gcc/config/riscv/riscv.opt
--- 4954,4960 ----
  9a0be0e3c4d4b0eec09eef7dee2a028a  gcc/config/riscv/riscv-vsetvl.cc
  16b7359c0b12895c0d7452fc89879a1a  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! 8423d6f6ef41768007985c3fa463a053  gcc/config/riscv/riscv.cc
  1153302a8d65cedebba8e1a3f67931b2  gcc/config/riscv/riscv.h
  e0f559ad59aa7daada8d2a405d8ea9d8  gcc/config/riscv/riscv.md
  c799356a57b52ab91ff324ab22516fba  gcc/config/riscv/riscv.opt
*************** a9c3cddee4e237141062720b72fe38cd  gcc/co
*** 5499,5505 ****
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  2a5216aefb9cdf4b270ef8e599cc794f  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! a370360952fe8c7906cff6f26e00bf79  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5499,5505 ----
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  2a5216aefb9cdf4b270ef8e599cc794f  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! c8b39c2c987c40601ceafaa155d33de9  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** e5ccdda9d62d96ac397910d0fa391b0a  gcc/cp
*** 5559,5565 ****
  29df6edf4122d4be24abc0274514c9bc  gcc/cp/cxx-pretty-print.cc
  955ecfa636599a39229757737e271819  gcc/cp/cxx-pretty-print.h
  c1cc5dac36866c611933c037cc1d6f2f  gcc/cp/cxxapi-data.csv
! 9f9cd31507a85abfedf778a5046dc99a  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
  0b589466f97f1843080d9667c2263668  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
--- 5559,5565 ----
  29df6edf4122d4be24abc0274514c9bc  gcc/cp/cxx-pretty-print.cc
  955ecfa636599a39229757737e271819  gcc/cp/cxx-pretty-print.h
  c1cc5dac36866c611933c037cc1d6f2f  gcc/cp/cxxapi-data.csv
! 074a6d9ca68c5ca0d006ce12f335b530  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
  0b589466f97f1843080d9667c2263668  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
*************** c2a7409e57253e5d9bfd8ce29fb85212  gcc/cp
*** 5579,5590 ****
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  8a43dc7eb02c2c19d4faa7344f490b26  gcc/cp/method.cc
! 553ec809cb48db3faec88d1cd462dd88  gcc/cp/module.cc
  4fbf6c5b0391fc30bc3aaea6d8cb1e3e  gcc/cp/name-lookup.cc
  9644410086c3beb90033e77613e9d1a7  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! 6ee3e41f349ec9e1b9c084a2fdcf5930  gcc/cp/parser.cc
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
  b80f0a5fbd5cf7b059c906972151dee1  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
--- 5579,5590 ----
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  8a43dc7eb02c2c19d4faa7344f490b26  gcc/cp/method.cc
! ab00584c91864cb462fa73b178bb5b0a  gcc/cp/module.cc
  4fbf6c5b0391fc30bc3aaea6d8cb1e3e  gcc/cp/name-lookup.cc
  9644410086c3beb90033e77613e9d1a7  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! a2d86d3655a737a6a9f1e60561394d14  gcc/cp/parser.cc
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
  b80f0a5fbd5cf7b059c906972151dee1  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
*************** a798cdca802a57ffa3473ab610b37c86  gcc/fo
*** 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
--- 6059,6065 ----
  4b1bef753dda2d19671f35332c69a0f7  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! c3344165cd2807ced9ba23d1af81b550  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** b7e224f665bb5044ce35ed09435bd4fb  gcc/fo
*** 6101,6107 ****
  a232f4d280ad08511e2718281b3d1ab6  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
  deb1774fa43b021f7fa8fde0fe6642d4  gcc/fortran/decl.cc
! c33e2c4c7527bec8a125dd093dc59f2a  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  9982bdf75ac5c9630f66edd2aea1fe8b  gcc/fortran/dump-parse-tree.cc
  860343539ea7488e7bb44b94ea2b0f77  gcc/fortran/error.cc
--- 6101,6107 ----
  a232f4d280ad08511e2718281b3d1ab6  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
  deb1774fa43b021f7fa8fde0fe6642d4  gcc/fortran/decl.cc
! 917fd2716f1eef2f47d4f032e14958ad  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  9982bdf75ac5c9630f66edd2aea1fe8b  gcc/fortran/dump-parse-tree.cc
  860343539ea7488e7bb44b94ea2b0f77  gcc/fortran/error.cc
*************** a4f5f15bbfd3cf3b780e3a8875ebf0df  gcc/fo
*** 6152,6159 ****
  d555f911945a83db335013815934e941  gcc/fortran/trans-const.cc
  857805820c2a6ac77d2652c610d23de8  gcc/fortran/trans-const.h
  ba1a270a0735e8dd213da50ccb70ea32  gcc/fortran/trans-decl.cc
! e5e7102933a854ebc51d0ba2c6fb28aa  gcc/fortran/trans-expr.cc
! d4d9ec95b989fa0422a277b616a1c8b0  gcc/fortran/trans-intrinsic.cc
  162651996dde6a304a90381b3b25482c  gcc/fortran/trans-io.cc
  b1027c10f4a35d0040a0da3b22a13d59  gcc/fortran/trans-openmp.cc
  03aafb32bf3170c38549a2536ebb7e4c  gcc/fortran/trans-stmt.cc
--- 6152,6159 ----
  d555f911945a83db335013815934e941  gcc/fortran/trans-const.cc
  857805820c2a6ac77d2652c610d23de8  gcc/fortran/trans-const.h
  ba1a270a0735e8dd213da50ccb70ea32  gcc/fortran/trans-decl.cc
! 238ad5aa85447100b73b8f59bf5dcaa8  gcc/fortran/trans-expr.cc
! 8ba8fa53a4179a343767efc9ef4e17be  gcc/fortran/trans-intrinsic.cc
  162651996dde6a304a90381b3b25482c  gcc/fortran/trans-io.cc
  b1027c10f4a35d0040a0da3b22a13d59  gcc/fortran/trans-openmp.cc
  03aafb32bf3170c38549a2536ebb7e4c  gcc/fortran/trans-stmt.cc
*************** b1497a03867668af210c32280876fdd7  gcc/sy
*** 8446,8452 ****
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 85b4ab38c7eaae125ba4ff41259cf0f9  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
! 17c4290992fdd0ff9e14f6e0e8f2d18b  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** fae22c7cff0bae185284077ff2e72523  gcc/te
*** 26372,26377 ****
--- 26372,26379 ----
  0a66e0a40527f0507cceaeb322c91a15  gcc/testsuite/g++.dg/modules/contracts-tpl-friend-1_b.C
  097ffafa56bf8b6bcbb8f85c58b0e187  gcc/testsuite/g++.dg/modules/convop-1_a.C
  02940f3eec05ab2c1e44ea29d72255b6  gcc/testsuite/g++.dg/modules/convop-1_b.C
+ f9fb2c7fc295df949a65ad17e27cbfe7  gcc/testsuite/g++.dg/modules/convop-2_a.H
+ f9153a236ec996492630837403e73485  gcc/testsuite/g++.dg/modules/convop-2_b.C
  ac21ba6dd7a4b896ded96e6d9d998074  gcc/testsuite/g++.dg/modules/cpp-1.C
  3bb7a96e17349f006fdc91b7d33ece61  gcc/testsuite/g++.dg/modules/cpp-10.C
  2d36bf18c705bff96fbeefdaf66de03e  gcc/testsuite/g++.dg/modules/cpp-11.C
*************** d78c1de0f7d9cac90e50c0208adc2926  gcc/te
*** 26738,26743 ****
--- 26740,26748 ----
  62e7f6f61022bc772dcc984ba06b0b3e  gcc/testsuite/g++.dg/modules/lambda-11.h
  8c9596d790271d8547290c1515a3350b  gcc/testsuite/g++.dg/modules/lambda-11_a.H
  967c2f48b085f1c18832266697fac4ee  gcc/testsuite/g++.dg/modules/lambda-11_b.C
+ 804382f5b6a9cda1fca29fc8024f66a4  gcc/testsuite/g++.dg/modules/lambda-12.h
+ f42f3f252e14bfc0ef3c1e93ea73a06d  gcc/testsuite/g++.dg/modules/lambda-12_a.H
+ 92f393f2dacc1d0ca3a6c8c35172d4a5  gcc/testsuite/g++.dg/modules/lambda-12_b.C
  d40eb3b191ce03c71ec885f4126c9c01  gcc/testsuite/g++.dg/modules/lambda-1_a.C
  0c208993fd82c4dab83fb16f53f43099  gcc/testsuite/g++.dg/modules/lambda-1_b.C
  0b364ead1b387b5505e2f7bf2e5dc3b5  gcc/testsuite/g++.dg/modules/lambda-2.h
*************** b8fef9a1bd09e90415f3e35f5466c85c  gcc/te
*** 28044,28049 ****
--- 28049,28055 ----
  f974ff4ce09c3f50fcec3f4ce9c39925  gcc/testsuite/g++.dg/opt/pr119518.C
  c2e43e3226b99fa6ecf149ed5d036d49  gcc/testsuite/g++.dg/opt/pr119613.C
  8ae5f63f132f2e69255225e052069238  gcc/testsuite/g++.dg/opt/pr119614.C
+ 46bab0272c3e399fa4db680833cb9a89  gcc/testsuite/g++.dg/opt/pr122394.C
  2896f5b1a96dd9fabb1dbb65cb4c5921  gcc/testsuite/g++.dg/opt/pr13066-1.C
  4f87f86b9f018cae74888e97468b2fe0  gcc/testsuite/g++.dg/opt/pr14029.C
  8fb7e68e9e9b5eb02628e03f5333e645  gcc/testsuite/g++.dg/opt/pr14888.C
*************** ba2918f2d50d14da19e142ac392345e1  gcc/te
*** 30333,30338 ****
--- 30339,30345 ----
  1ea2af4911d47cd67d9e3ab837ef48bc  gcc/testsuite/g++.dg/template/dependent-base3.C
  d84a51031591e89db0598597a16e9314  gcc/testsuite/g++.dg/template/dependent-base4.C
  1b766fbec06df8398c3415a9e993d06e  gcc/testsuite/g++.dg/template/dependent-base5.C
+ 5ba9018528a9791e64425a869d0b3993  gcc/testsuite/g++.dg/template/dependent-base6.C
  d06a8849a0e0df87f9e222f08a6f4852  gcc/testsuite/g++.dg/template/dependent-expr1.C
  10b3f1b7a34c9d4e9be1e9844babd34d  gcc/testsuite/g++.dg/template/dependent-expr10.C
  6b486f8c9b9b318c76811eb21046957f  gcc/testsuite/g++.dg/template/dependent-expr2.C
*************** df238b64cc974628a48afaac0cd271a1  gcc/te
*** 66598,66603 ****
--- 66605,66611 ----
  1b79fc9f352eda12d6be24fe2d93d5bc  gcc/testsuite/gcc.target/aarch64/sve/pr116259-1.c
  37c8a6d45bec8da5daf1eb003bdb2102  gcc/testsuite/gcc.target/aarch64/sve/pr119351.c
  fba890ec69e5613e555983284ebab389  gcc/testsuite/gcc.target/aarch64/sve/pr119351_run.c
+ ecd052b8b25dcdd22b9bc9b4afdddf04  gcc/testsuite/gcc.target/aarch64/sve/pr121604_brk.c
  7e2aaf0806edd37415079b5c2e48b66c  gcc/testsuite/gcc.target/aarch64/sve/pr81003.c
  00b752a6e175de8b1a300df08f275461  gcc/testsuite/gcc.target/aarch64/sve/pr87563.c
  c56eeba71ad463673a1bdb30e7a94863  gcc/testsuite/gcc.target/aarch64/sve/pr87815.c
*************** f5f6f291e9c1c848a46c8ef91ca99f58  gcc/te
*** 68407,68413 ****
  429b387819fe31e459436020f966ae50  gcc/testsuite/gcc.target/aarch64/sve2/pr109636_1.c
  b1f13471701b0335894317ae214cc68c  gcc/testsuite/gcc.target/aarch64/sve2/pr116934.c
  3fcc51d99dc7ff15a8bb60da25dc470e  gcc/testsuite/gcc.target/aarch64/sve2/pr120999.c
! 1620fd00b76f773c65274065175f0eb2  gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c
  3ddfd16fcbf89890fd9785fec8f0c081  gcc/testsuite/gcc.target/aarch64/sve2/shracc_1.c
  8cd4d6e010de57b57d5d8fb325fa79bb  gcc/testsuite/gcc.target/aarch64/sve2/unpred_mul_1.c
  826ee7c8b41bb7da016220e1f67b1306  gcc/testsuite/gcc.target/aarch64/sve2/uzpq_1.c
--- 68415,68422 ----
  429b387819fe31e459436020f966ae50  gcc/testsuite/gcc.target/aarch64/sve2/pr109636_1.c
  b1f13471701b0335894317ae214cc68c  gcc/testsuite/gcc.target/aarch64/sve2/pr116934.c
  3fcc51d99dc7ff15a8bb60da25dc470e  gcc/testsuite/gcc.target/aarch64/sve2/pr120999.c
! b2d92d06e51698908b628bbf67a8336b  gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c
! 0f6c07a30f53dc4aadca1b9cf6c3a8db  gcc/testsuite/gcc.target/aarch64/sve2/pr121604_pmov.c
  3ddfd16fcbf89890fd9785fec8f0c081  gcc/testsuite/gcc.target/aarch64/sve2/shracc_1.c
  8cd4d6e010de57b57d5d8fb325fa79bb  gcc/testsuite/gcc.target/aarch64/sve2/unpred_mul_1.c
  826ee7c8b41bb7da016220e1f67b1306  gcc/testsuite/gcc.target/aarch64/sve2/uzpq_1.c
*************** fa6ebeb8a38629b307b197117b388ef7  gcc/te
*** 78400,78406 ****
  28a4a0d6bd0e09a7f1da7f5515db9c70  gcc/testsuite/gcc.target/i386/builtin-copysign-6.c
  eeb2c795579e4b693eed6b471e041925  gcc/testsuite/gcc.target/i386/builtin-copysign-7.c
  4dde22c7279c7c8e684af5f718431d7d  gcc/testsuite/gcc.target/i386/builtin-copysign-8a.c
! a6cac29ed0855c52ab4ab6fa01911e5f  gcc/testsuite/gcc.target/i386/builtin-copysign-8b.c
  04d6147486a507d49f5d165aac499b5d  gcc/testsuite/gcc.target/i386/builtin-copysign.c
  7c1badccd4856954ccba2139093860d2  gcc/testsuite/gcc.target/i386/builtin-fabs-1.c
  eb024e3b157728adf6d4f14b1bd4c69d  gcc/testsuite/gcc.target/i386/builtin-fabs-2.c
--- 78409,78415 ----
  28a4a0d6bd0e09a7f1da7f5515db9c70  gcc/testsuite/gcc.target/i386/builtin-copysign-6.c
  eeb2c795579e4b693eed6b471e041925  gcc/testsuite/gcc.target/i386/builtin-copysign-7.c
  4dde22c7279c7c8e684af5f718431d7d  gcc/testsuite/gcc.target/i386/builtin-copysign-8a.c
! 19fe0cd1992bc2d71db601dda2c2bd34  gcc/testsuite/gcc.target/i386/builtin-copysign-8b.c
  04d6147486a507d49f5d165aac499b5d  gcc/testsuite/gcc.target/i386/builtin-copysign.c
  7c1badccd4856954ccba2139093860d2  gcc/testsuite/gcc.target/i386/builtin-fabs-1.c
  eb024e3b157728adf6d4f14b1bd4c69d  gcc/testsuite/gcc.target/i386/builtin-fabs-2.c
*************** bde7ba2405e4971efe4fb79faf6333ec  gcc/te
*** 83298,83305 ****
  d984aef61afc8f09af4c880507f6c6e6  gcc/testsuite/gcc.target/loongarch/cmodel-func-attr-1.c
  50ab91c6f8ea866c2cdb3d64e26052d2  gcc/testsuite/gcc.target/loongarch/cmodel-pragma-attr-1.c
  6c4891b18c6bd1154b7ea8237dc05a30  gcc/testsuite/gcc.target/loongarch/cmov_ii.c
! 8372ae2166ed011a23a10b6a6415bc98  gcc/testsuite/gcc.target/loongarch/conditional-move-opt-1.c
! e47b1f0d85db9f65f76cc6e828f1d7a3  gcc/testsuite/gcc.target/loongarch/conditional-move-opt-2.c
  d714312bcf2901d8e4e91206a319c6bb  gcc/testsuite/gcc.target/loongarch/const-double-zero-stx.c
  c794f526430241ad83fd3ca5415524f0  gcc/testsuite/gcc.target/loongarch/crc-sext.c
  2ea39544bfe26567ec668ca7a33a8a5e  gcc/testsuite/gcc.target/loongarch/direct-extern-1.c
--- 83307,83315 ----
  d984aef61afc8f09af4c880507f6c6e6  gcc/testsuite/gcc.target/loongarch/cmodel-func-attr-1.c
  50ab91c6f8ea866c2cdb3d64e26052d2  gcc/testsuite/gcc.target/loongarch/cmodel-pragma-attr-1.c
  6c4891b18c6bd1154b7ea8237dc05a30  gcc/testsuite/gcc.target/loongarch/cmov_ii.c
! 1faf96722faacc0ff389b62bf83b34ea  gcc/testsuite/gcc.target/loongarch/conditional-move-opt-1.c
! 9f48ac8201f97bdbd1ec5edcd8f2984e  gcc/testsuite/gcc.target/loongarch/conditional-move-opt-2.c
! 5f9e7145f8a500557b5629f8d93ad860  gcc/testsuite/gcc.target/loongarch/conditional-move-opt-3.c
  d714312bcf2901d8e4e91206a319c6bb  gcc/testsuite/gcc.target/loongarch/const-double-zero-stx.c
  c794f526430241ad83fd3ca5415524f0  gcc/testsuite/gcc.target/loongarch/crc-sext.c
  2ea39544bfe26567ec668ca7a33a8a5e  gcc/testsuite/gcc.target/loongarch/direct-extern-1.c
*************** c9d08bb72896d9b4861ce4073ec5e57f  gcc/te
*** 83336,83341 ****
--- 83346,83352 ----
  f72ce6aeb8beb0eff27354c07ef71cd1  gcc/testsuite/gcc.target/loongarch/flt-abi-isa-3.c
  ab6db876a44193a92b0a1625c65eb4e7  gcc/testsuite/gcc.target/loongarch/flt-abi-isa-4.c
  aaaf53a882a8a0ae0583d851021e03cc  gcc/testsuite/gcc.target/loongarch/fmax-fmin.c
+ ba1f9cd7776de398eabc15fb6f7d523b  gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c
  fee1bedd25e7db9b4e91f3ede9e05608  gcc/testsuite/gcc.target/loongarch/frint.c
  2f79a7482d38a9632f39b484c09a8f2f  gcc/testsuite/gcc.target/loongarch/fscaleb.c
  40d69683116e216d2295e4600c830736  gcc/testsuite/gcc.target/loongarch/ftint-no-inexact.c
*************** b2926d7d0c3ebd0521abd5b1bd13e5f8  gcc/te
*** 88771,88776 ****
--- 88782,88788 ----
  8c91cf2796ff0e2ea816e9d35b520e8d  gcc/testsuite/gcc.target/riscv/pr118248.c
  bf00cac22e30fab76ac74c7b2e5af207  gcc/testsuite/gcc.target/riscv/pr119830.c
  b62a32eafb5e661786b5ef2b03b30be9  gcc/testsuite/gcc.target/riscv/pr119971.c
+ 5209003e1af2c30db39a214e7aa84709  gcc/testsuite/gcc.target/riscv/pr120674.c
  0cdcf97373ed486ded9f3c10ef04348d  gcc/testsuite/gcc.target/riscv/pr120714.c
  37a08389ba95284cc27832767dfc1430  gcc/testsuite/gcc.target/riscv/pr43644.c
  10400130cc47973d43925669f3c795ed  gcc/testsuite/gcc.target/riscv/pr84660.c
*************** ae3f6e29ad3108163b5c5c6a5f70ef7c  gcc/te
*** 104555,104560 ****
--- 104567,104573 ----
  ce08d00725a7d8d4e9547e8bf55eaa4b  gcc/testsuite/gfortran.dg/is_contiguous_2.f90
  b6282b55783f0b1b931571f793113587  gcc/testsuite/gfortran.dg/is_contiguous_3.f90
  d64f2f360e5963a4bea9642fa7bf28c2  gcc/testsuite/gfortran.dg/is_contiguous_4.f90
+ ebc7811d4f30308fbc8ee420f6168425  gcc/testsuite/gfortran.dg/is_contiguous_5.f90
  765cb2ca72a98a43c69ea99a61aa0a59  gcc/testsuite/gfortran.dg/is_iostat_end_eor_1.f90
  ca491b51342a862f4f525db35073fe93  gcc/testsuite/gfortran.dg/is_iostat_end_eor_2.f90
  e29de44a3798652da0c04b03153d2639  gcc/testsuite/gfortran.dg/ishft_1.f90
*************** c00e10e2dedc2a4d4050941a3ae36ab2  gcc/te
*** 107328,107333 ****
--- 107341,107347 ----
  d175a283aab741037bd1bdee76a76fa5  gcc/testsuite/gfortran.dg/transfer_array_intrinsic_4.f90
  c5cef3aa9c3895b4e6b38e993481ff14  gcc/testsuite/gfortran.dg/transfer_array_intrinsic_5.f90
  446033cb0484da91a769a31c11989942  gcc/testsuite/gfortran.dg/transfer_array_subref.f90
+ f3cfa4f9bf47a8662e4b6c7ad0aaf36f  gcc/testsuite/gfortran.dg/transfer_array_subref_2.f90
  fdabd8c65dcb8fb1bfe06c29c937c219  gcc/testsuite/gfortran.dg/transfer_assumed_size_1.f90
  1c08633181f8b50ad8fd08ed1f4f207f  gcc/testsuite/gfortran.dg/transfer_char_kind4.f90
  0d5a3d18a1eeb0de1ca65d86e1cd68f8  gcc/testsuite/gfortran.dg/transfer_check_1.f90
*************** bc764eca2f460bc6fb657fb675420237  gcc/te
*** 108370,108375 ****
--- 108384,108391 ----
  eabee42e1a561616023ffd1f4d1a64e2  gcc/testsuite/gfortran.fortran-torture/execute/write_logical.f90
  e37afcf68e701a2324e777ab5f6054bf  gcc/testsuite/gfortran.target/aarch64/aarch64.exp
  c37460d9fc2ef94382053354df0c3ef3  gcc/testsuite/gfortran.target/aarch64/pr116234.f
+ f49a9e5ed9144077a6174c71610d8918  gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90
+ 6890252516b3245a15477e317869c38e  gcc/testsuite/gfortran.target/aarch64/pr122408_2.f90
  ae00a4e2372b755ec611b96aaff6a49b  gcc/testsuite/gfortran.target/riscv/rvv/pr111395.f90
  284fdebd0dafabcd770080ec38c8109a  gcc/testsuite/gfortran.target/riscv/rvv/pr111566.f90
  803fa495544cb97b2d47fa3c10b273ce  gcc/testsuite/gfortran.target/riscv/rvv/pr118182.f
*************** edaa2d4ca109a150c959772f059b6281  gcc/tr
*** 117874,117880 ****
  c0b0549adb2c1140cf285901abb5a78c  gcc/tree-ssa-math-opts.h
  0ed882dedcd92c361bc556587aaa4b74  gcc/tree-ssa-operands.cc
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
! 08cb1e9bb65caad7ed062b606b4c9334  gcc/tree-ssa-phiopt.cc
  0864f59d85045caee0a643f82fa6d20c  gcc/tree-ssa-phiprop.cc
  0c173f8637d1259922572eb432a405ef  gcc/tree-ssa-pre.cc
  bc94d7017980d97ff957feb308ae771c  gcc/tree-ssa-propagate.cc
--- 117890,117896 ----
  c0b0549adb2c1140cf285901abb5a78c  gcc/tree-ssa-math-opts.h
  0ed882dedcd92c361bc556587aaa4b74  gcc/tree-ssa-operands.cc
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
! c5c94f731fa48c6557765e712c67aaf5  gcc/tree-ssa-phiopt.cc
  0864f59d85045caee0a643f82fa6d20c  gcc/tree-ssa-phiprop.cc
  0c173f8637d1259922572eb432a405ef  gcc/tree-ssa-pre.cc
  bc94d7017980d97ff957feb308ae771c  gcc/tree-ssa-propagate.cc
*************** cac3afe79bbadb8c304cebff78dbb3df  gcc/tr
*** 117917,117923 ****
  cc0bdf3f684b251509b8552d2d8549a3  gcc/tree-vect-loop-manip.cc
  a41c3fb8911461149186ff901cf31d4a  gcc/tree-vect-loop.cc
  77240c08cea454c2d4a449206f7930c3  gcc/tree-vect-patterns.cc
! baa70369c21f662d5e61d1296052d231  gcc/tree-vect-slp-patterns.cc
  1509298594ae256fc192ed720185ee63  gcc/tree-vect-slp.cc
  c095caa5b1ced0e7d097e6a525709865  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
--- 117933,117939 ----
  cc0bdf3f684b251509b8552d2d8549a3  gcc/tree-vect-loop-manip.cc
  a41c3fb8911461149186ff901cf31d4a  gcc/tree-vect-loop.cc
  77240c08cea454c2d4a449206f7930c3  gcc/tree-vect-patterns.cc
! 75eb406d11bc2ae9f01cc1e72787b3d5  gcc/tree-vect-slp-patterns.cc
  1509298594ae256fc192ed720185ee63  gcc/tree-vect-slp.cc
  c095caa5b1ced0e7d097e6a525709865  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
diff -Nrcpad gcc-15-20251025/gcc/ChangeLog gcc-15-20251101/gcc/ChangeLog
*** gcc-15-20251025/gcc/ChangeLog	Sat Oct 25 22:32:26 2025
--- gcc-15-20251101/gcc/ChangeLog	Sat Nov  1 22:32:35 2025
***************
*** 1,3 ****
--- 1,74 ----
+ 2025-10-31  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-10-27  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/122408
+ 	* tree-vect-slp-patterns.cc (vect_validate_multiplication): Cleanup and
+ 	document interface.
+ 	(complex_mul_pattern::matches, complex_fms_pattern::matches): Update to
+ 	new interface.
+ 
+ 2025-10-31  Jinyang He  <hejinyang@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-10-30  Jinyang He  <hejinyang@loongson.cn>
+ 		    Peng Fan  <fanpeng@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_expand_conditional_move): Only allow valid binary
+ 	op when optimize conditional move.
+ 
+ 2025-10-30  Guo Jie  <guojie@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-10-30  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* config/loongarch/lasx.md (fnma<mode>4): Remove.
+ 	* config/loongarch/lsx.md (fnma<mode>4): Remove.
+ 	* config/loongarch/simd.md (fnma<mode>4): Simplify and correct.
+ 
+ 2025-10-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/122394
+ 	* tree-ssa-phiopt.cc (spaceship_replacement): Use
+ 	build_debug_expr_decl instead of manually building DEBUG_EXPR_DECL
+ 	and getting SET_DECL_MODE wrong.
+ 
+ 2025-10-27  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	Backported from master:
+ 	2025-10-13  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/120674
+ 	* config/riscv/riscv.cc (riscv_dwarf_poly_indeterminite_value): Do not
+ 	set FACTOR to zero, for that case use one instead.
+ 
+ 2025-10-27  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-10-17  Tamar Christina  <tamar.christina@arm.com>
+ 		    Jennifer Schmitz  <jschmitz@nvidia.com>
+ 
+ 	PR target/121604
+ 	* config/aarch64/aarch64-sve-builtins-shapes.cc (apply_predication):
+ 	Store gp_index.
+ 	(struct pmov_to_vector_lane_def): Mark instruction as has no GP.
+ 	* config/aarch64/aarch64-sve-builtins.h (function_instance::gp_value,
+ 	function_instance::inactive_values, function_instance::gp_index,
+ 	function_shape::has_gp_argument_p): New.
+ 	* config/aarch64/aarch64-sve-builtins.cc (gimple_folder::fold_pfalse):
+ 	Simplify code and use GP helpers.
+ 
+ 2025-10-26  LIU Hao  <lh_mouse@126.com>
+ 
+ 	Backported from master:
+ 	2025-10-26  LIU Hao  <lh_mouse@126.com>
+ 
+ 	PR target/119079
+ 	* config/i386/i386.md: Use `movsxd` to perform SI-to-DI extension in Intel
+ 	syntax.
+ 
  2025-10-24  Linsen Zhou  <i@lin.moe>
  
  	Backported from master:
diff -Nrcpad gcc-15-20251025/gcc/DATESTAMP gcc-15-20251101/gcc/DATESTAMP
*** gcc-15-20251025/gcc/DATESTAMP	Sat Oct 25 22:32:26 2025
--- gcc-15-20251101/gcc/DATESTAMP	Sat Nov  1 22:32:36 2025
***************
*** 1 ****
! 20251025
--- 1 ----
! 20251101
diff -Nrcpad gcc-15-20251025/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc gcc-15-20251101/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc
*** gcc-15-20251025/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc	Sat Nov  1 22:32:37 2025
***************
*** 21,27 ****
--- 21,30 ----
  #include "system.h"
  #include "coretypes.h"
  #include "tm.h"
+ #include "basic-block.h"
  #include "tree.h"
+ #include "function.h"
+ #include "gimple.h"
  #include "rtl.h"
  #include "tm_p.h"
  #include "memmodel.h"
*************** za_group_is_pure_overload (const functio
*** 68,90 ****
     types in ARGUMENT_TYPES.  RETURN_TYPE is the type returned by the
     function.  */
  static void
! apply_predication (const function_instance &instance, tree return_type,
  		   vec<tree> &argument_types)
  {
    /* There are currently no SME ZA instructions that have both merging and
       unpredicated forms, so for simplicity, the predicates are always included
       in the original format string.  */
    if (instance.pred != PRED_none && instance.pred != PRED_za_m)
      {
        argument_types.quick_insert (0, instance.gp_type ());
        /* For unary merge operations, the first argument is a vector with
  	 the same type as the result.  For unary_convert_narrowt it also
  	 provides the "bottom" half of active elements, and is present
  	 for all types of predication.  */
        auto nargs = argument_types.length () - 1;
        if (instance.shape->has_merge_argument_p (instance, nargs))
! 	argument_types.quick_insert (0, return_type);
      }
  }
  
  /* Parse and move past an element type in FORMAT and return it as a type
--- 71,106 ----
     types in ARGUMENT_TYPES.  RETURN_TYPE is the type returned by the
     function.  */
  static void
! apply_predication (function_instance &instance, tree return_type,
  		   vec<tree> &argument_types)
  {
+   /* Initially mark the function as not being predicated.  */
+   instance.gp_index = -1;
+ 
    /* There are currently no SME ZA instructions that have both merging and
       unpredicated forms, so for simplicity, the predicates are always included
       in the original format string.  */
    if (instance.pred != PRED_none && instance.pred != PRED_za_m)
      {
        argument_types.quick_insert (0, instance.gp_type ());
+       instance.gp_index = 0;
        /* For unary merge operations, the first argument is a vector with
  	 the same type as the result.  For unary_convert_narrowt it also
  	 provides the "bottom" half of active elements, and is present
  	 for all types of predication.  */
        auto nargs = argument_types.length () - 1;
        if (instance.shape->has_merge_argument_p (instance, nargs))
! 	{
! 	  argument_types.quick_insert (0, return_type);
! 	  instance.gp_index = 1;
! 	}
      }
+ 
+   /* In this case the predicate type we added above is a non-governing
+      predicate operand (and there is no GP), so update the gp_index value
+      accordingly.  */
+   if (!instance.shape->has_gp_argument_p (instance))
+     instance.gp_index = -1;
  }
  
  /* Parse and move past an element type in FORMAT and return it as a type
*************** struct pmov_to_vector_lane_def : public
*** 3301,3306 ****
--- 3317,3330 ----
         but it doesn't currently have the necessary information.  */
      return c.require_immediate_range (1, 1, bytes - 1);
    }
+ 
+   /* This function has a predicate argument, and is a merging instruction, but
+      the predicate is not a GP.  */
+   bool
+   has_gp_argument_p (const function_instance &) const override
+   {
+     return false;
+   }
  };
  SHAPE (pmov_to_vector_lane)
  
diff -Nrcpad gcc-15-20251025/gcc/config/aarch64/aarch64-sve-builtins.cc gcc-15-20251101/gcc/config/aarch64/aarch64-sve-builtins.cc
*** gcc-15-20251025/gcc/config/aarch64/aarch64-sve-builtins.cc	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/config/aarch64/aarch64-sve-builtins.cc	Sat Nov  1 22:32:37 2025
*************** gimple_folder::redirect_pred_x ()
*** 3630,3653 ****
  gimple *
  gimple_folder::fold_pfalse ()
  {
!   if (pred == PRED_none)
      return nullptr;
!   tree arg0 = gimple_call_arg (call, 0);
    if (pred == PRED_m)
      {
!       /* Unary function shapes with _m predication are folded to the
! 	 inactive vector (arg0), while other function shapes are folded
! 	 to op1 (arg1).  */
!       tree arg1 = gimple_call_arg (call, 1);
!       if (is_pfalse (arg1))
! 	return fold_call_to (arg0);
!       if (is_pfalse (arg0))
! 	return fold_call_to (arg1);
        return nullptr;
      }
!   if ((pred == PRED_x || pred == PRED_z) && is_pfalse (arg0))
      return fold_call_to (build_zero_cst (TREE_TYPE (lhs)));
!   if (pred == PRED_implicit && is_pfalse (arg0))
      {
        unsigned int flags = call_properties ();
        /* Folding to lhs = {0, ...} is not appropriate for intrinsics with
--- 3630,3651 ----
  gimple *
  gimple_folder::fold_pfalse ()
  {
!   tree gp = gp_value (call);
!   /* If there isn't a GP then we can't do any folding as the instruction isn't
!      predicated.  */
!   if (!gp)
      return nullptr;
! 
    if (pred == PRED_m)
      {
!       tree val = inactive_values (call);
!       if (is_pfalse (gp))
! 	return fold_call_to (val);
        return nullptr;
      }
!   if ((pred == PRED_x || pred == PRED_z) && is_pfalse (gp))
      return fold_call_to (build_zero_cst (TREE_TYPE (lhs)));
!   if (pred == PRED_implicit && is_pfalse (gp))
      {
        unsigned int flags = call_properties ();
        /* Folding to lhs = {0, ...} is not appropriate for intrinsics with
diff -Nrcpad gcc-15-20251025/gcc/config/aarch64/aarch64-sve-builtins.h gcc-15-20251101/gcc/config/aarch64/aarch64-sve-builtins.h
*** gcc-15-20251025/gcc/config/aarch64/aarch64-sve-builtins.h	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/config/aarch64/aarch64-sve-builtins.h	Sat Nov  1 22:32:37 2025
*************** public:
*** 402,407 ****
--- 402,409 ----
    bool could_trap_p () const;
  
    vector_type_index gp_type_index () const;
+   tree gp_value (gcall *) const;
+   tree inactive_values (gcall *) const;
    tree gp_type () const;
  
    unsigned int vectors_per_tuple () const;
*************** public:
*** 435,440 ****
--- 437,443 ----
    group_suffix_index group_suffix_id;
    predication_index pred;
    fpm_mode_index fpm_mode;
+   int gp_index;
  };
  
  class registered_function;
*************** public:
*** 800,805 ****
--- 803,810 ----
    virtual bool has_merge_argument_p (const function_instance &,
  				     unsigned int) const;
  
+   virtual bool has_gp_argument_p (const function_instance &) const;
+ 
    virtual bool explicit_type_suffix_p (unsigned int) const = 0;
  
    /* True if the group suffix is present in overloaded names.
*************** function_instance::gp_type () const
*** 948,953 ****
--- 953,985 ----
    return acle_vector_types[0][gp_type_index ()];
  }
  
+ /* Return the tree value that should be used as the governing predicate of
+    this function.  If none then return NULL_TREE.  */
+ inline tree
+ function_instance::gp_value (gcall *call) const
+ {
+   if (gp_index < 0)
+     return NULL_TREE;
+ 
+   return gimple_call_arg (call, gp_index);
+ }
+ 
+ /* Return the tree value that should be used for the inactive lanes should this
+    function be a predicated function with a gp.  Otherwise return NULL_TREE.  */
+ inline tree
+ function_instance::inactive_values (gcall *call) const
+ {
+   if (gp_index < 0)
+     return NULL_TREE;
+ 
+   /* Function is unary with m predicate.  */
+   if (gp_index == 1)
+     return gimple_call_arg (call, 0);
+ 
+   /* Else the inactive values are the next element.  */
+   return gimple_call_arg (call, 1);
+ }
+ 
  /* If the function operates on tuples of vectors, return the number
     of vectors in the tuples, otherwise return 1.  */
  inline unsigned int
*************** function_shape::has_merge_argument_p (co
*** 1122,1127 ****
--- 1154,1167 ----
    return nargs == 1 && instance.pred == PRED_m;
  }
  
+ /* Return true if INSTANCE has an predicate argument that can be used as the global
+    predicate.  */
+ inline bool
+ function_shape::has_gp_argument_p (const function_instance &instance) const
+ {
+   return instance.pred != PRED_none;
+ }
+ 
  /* Return the mode of the result of a call.  */
  inline machine_mode
  function_expander::result_mode () const
diff -Nrcpad gcc-15-20251025/gcc/config/i386/i386.md gcc-15-20251101/gcc/config/i386/i386.md
*** gcc-15-20251025/gcc/config/i386/i386.md	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/config/i386/i386.md	Sat Nov  1 22:32:37 2025
***************
*** 4983,4989 ****
    "TARGET_64BIT"
    "@
     {cltq|cdqe}
!    movs{lq|x}\t{%1, %0|%0, %1}"
    [(set_attr "type" "imovx")
     (set_attr "mode" "DI")
     (set_attr "prefix_0f" "0")
--- 4983,4989 ----
    "TARGET_64BIT"
    "@
     {cltq|cdqe}
!    movs{lq|xd}\t{%1, %0|%0, %1}"
    [(set_attr "type" "imovx")
     (set_attr "mode" "DI")
     (set_attr "prefix_0f" "0")
***************
*** 27625,27631 ****
  {
    output_asm_insn ("mov{<imodesuffix>}\t{%3, %<k>1|%<k>1, %3}", operands);
    output_asm_insn ("mov{<imodesuffix>}\t{%<k>1, %0|%0, %<k>1}", operands);
!   return "movs{lq|x}\t{%2, %1|%1, %2}";
  }
    [(set_attr "type" "multi")
     (set_attr "length" "24")])
--- 27625,27631 ----
  {
    output_asm_insn ("mov{<imodesuffix>}\t{%3, %<k>1|%<k>1, %3}", operands);
    output_asm_insn ("mov{<imodesuffix>}\t{%<k>1, %0|%0, %<k>1}", operands);
!   return "movs{lq|xd}\t{%2, %1|%1, %2}";
  }
    [(set_attr "type" "multi")
     (set_attr "length" "24")])
diff -Nrcpad gcc-15-20251025/gcc/config/loongarch/lasx.md gcc-15-20251101/gcc/config/loongarch/lasx.md
*** gcc-15-20251025/gcc/config/loongarch/lasx.md	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/config/loongarch/lasx.md	Sat Nov  1 22:32:37 2025
***************
*** 993,1008 ****
    [(set_attr "type" "simd_fmadd")
     (set_attr "mode" "<MODE>")])
  
- (define_insn "fnma<mode>4"
-   [(set (match_operand:FLASX 0 "register_operand" "=f")
- 	(fma:FLASX (neg:FLASX (match_operand:FLASX 1 "register_operand" "f"))
- 		   (match_operand:FLASX 2 "register_operand" "f")
- 		   (match_operand:FLASX 3 "register_operand" "0")))]
-   "ISA_HAS_LASX"
-   "xvfnmsub.<flasxfmt>\t%u0,%u1,%u2,%u0"
-   [(set_attr "type" "simd_fmadd")
-    (set_attr "mode" "<MODE>")])
- 
  (define_expand "sqrt<mode>2"
    [(set (match_operand:FLASX 0 "register_operand")
      (sqrt:FLASX (match_operand:FLASX 1 "register_operand")))]
--- 993,998 ----
diff -Nrcpad gcc-15-20251025/gcc/config/loongarch/loongarch.cc gcc-15-20251101/gcc/config/loongarch/loongarch.cc
*** gcc-15-20251025/gcc/config/loongarch/loongarch.cc	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/config/loongarch/loongarch.cc	Sat Nov  1 22:32:37 2025
*************** loongarch_expand_conditional_move (rtx *
*** 5437,5448 ****
  	    }
  	}
  
        /* Check if the optimization conditions are met.  */
        if (value_if_true_insn
  	  && value_if_false_insn
! 	  /* Make sure that value_if_false and var are the same.  */
! 	  && BINARY_P (value_if_true_insn_src
! 		       = SET_SRC (single_set (value_if_true_insn)))
  	  /* Make sure that both value_if_true and value_if_false
  	     has the same var.  */
  	  && rtx_equal_p (XEXP (value_if_true_insn_src, 0),
--- 5437,5468 ----
  	    }
  	}
  
+       auto is_binary_op_0_keep_orig = [](enum rtx_code code)
+ 	{
+ 	  switch (code)
+ 	    {
+ 	    case PLUS:
+ 	    case MINUS:
+ 	    case IOR:
+ 	    case XOR:
+ 	    case ROTATE:
+ 	    case ROTATERT:
+ 	    case ASHIFT:
+ 	    case ASHIFTRT:
+ 	    case LSHIFTRT:
+ 	      return true;
+ 	    default:
+ 	      return false;
+ 	    }
+ 	};
+ 
        /* Check if the optimization conditions are met.  */
        if (value_if_true_insn
  	  && value_if_false_insn
! 	  /* Make sure that the orig value OP 0 keep orig.  */
! 	  && (value_if_true_insn_src
! 	      = SET_SRC (single_set (value_if_true_insn)))
! 	  && is_binary_op_0_keep_orig ( GET_CODE (value_if_true_insn_src))
  	  /* Make sure that both value_if_true and value_if_false
  	     has the same var.  */
  	  && rtx_equal_p (XEXP (value_if_true_insn_src, 0),
diff -Nrcpad gcc-15-20251025/gcc/config/loongarch/lsx.md gcc-15-20251101/gcc/config/loongarch/lsx.md
*** gcc-15-20251025/gcc/config/loongarch/lsx.md	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/config/loongarch/lsx.md	Sat Nov  1 22:32:37 2025
***************
*** 852,867 ****
    [(set_attr "type" "simd_fmadd")
     (set_attr "mode" "<MODE>")])
  
- (define_insn "fnma<mode>4"
-   [(set (match_operand:FLSX 0 "register_operand" "=f")
- 	(fma:FLSX (neg:FLSX (match_operand:FLSX 1 "register_operand" "f"))
- 		  (match_operand:FLSX 2 "register_operand" "f")
- 		  (match_operand:FLSX 3 "register_operand" "0")))]
-   "ISA_HAS_LSX"
-   "vfnmsub.<flsxfmt>\t%w0,%w1,%w2,%w0"
-   [(set_attr "type" "simd_fmadd")
-    (set_attr "mode" "<MODE>")])
- 
  (define_expand "sqrt<mode>2"
    [(set (match_operand:FLSX 0 "register_operand")
      (sqrt:FLSX (match_operand:FLSX 1 "register_operand")))]
--- 852,857 ----
diff -Nrcpad gcc-15-20251025/gcc/config/loongarch/simd.md gcc-15-20251101/gcc/config/loongarch/simd.md
*** gcc-15-20251025/gcc/config/loongarch/simd.md	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/config/loongarch/simd.md	Sat Nov  1 22:32:37 2025
***************
*** 431,436 ****
--- 431,447 ----
    [(set_attr "type" "simd_int_arith")
     (set_attr "mode" "<MODE>")])
  
+ ;; <x>vfnmsub.{s/d}
+ (define_insn "fnma<mode>4"
+   [(set (match_operand:FVEC 0 "register_operand" "=f")
+ 	(fma:FVEC (neg:FVEC (match_operand:FVEC 1 "register_operand" "f"))
+ 		  (match_operand:FVEC 2 "register_operand" "f")
+ 		  (match_operand:FVEC 3 "register_operand" "f")))]
+   "!HONOR_SIGNED_ZEROS (<MODE>mode)"
+   "<x>vfnmsub.<simdfmt>\t%<wu>0,%<wu>1,%<wu>2,%<wu>3"
+   [(set_attr "type" "simd_fmadd")
+    (set_attr "mode" "<MODE>")])
+ 
  ;; <x>vfcmp.*.{s/d} with defined RTX code
  ;; There are no fcmp.{sugt/suge/cgt/cge}.{s/d} menmonics in GAS, so we have
  ;; to reverse the operands ourselves :(.
diff -Nrcpad gcc-15-20251025/gcc/config/riscv/riscv.cc gcc-15-20251101/gcc/config/riscv/riscv.cc
*** gcc-15-20251025/gcc/config/riscv/riscv.cc	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/config/riscv/riscv.cc	Sat Nov  1 22:32:37 2025
*************** riscv_dwarf_poly_indeterminate_value (un
*** 11809,11814 ****
--- 11809,11821 ----
    */
    gcc_assert (i == 1);
    *factor = BYTES_PER_RISCV_VECTOR.coeffs[1];
+ 
+   /* The factor will be zero if vector is not enabled.  That ultimately
+      causes problems in the dwarf2 emitter as the factor is used for
+      a division, causing a divide by zero.  */
+   if (*factor == 0)
+     *factor = 1;
+ 
    *offset = 1;
    return RISCV_DWARF_VLENB;
  }
diff -Nrcpad gcc-15-20251025/gcc/cp/ChangeLog gcc-15-20251101/gcc/cp/ChangeLog
*** gcc-15-20251025/gcc/cp/ChangeLog	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/cp/ChangeLog	Sat Nov  1 22:32:38 2025
***************
*** 1,3 ****
--- 1,37 ----
+ 2025-10-28  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-14  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/122192
+ 	* parser.cc (cp_parser_mem_initializer_id): Pass class_type
+ 	instead of typename_type to cp_parser_class_name in the
+ 	nested-name-specifier case.
+ 
+ 2025-10-28  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-10  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/122192
+ 	* decl.cc (make_typename_type): Document base-specifier as
+ 	another type-only lookup case.
+ 	* parser.cc (cp_parser_class_name): Propagate tag_type to
+ 	make_typename_type instead of hardcoding typename_type.
+ 	(cp_parser_base_specifier): Pass class_type instead of
+ 	typename_type as tag_type to cp_parser_class_name.
+ 
+ 2025-10-28  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-10-27  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122310
+ 	* module.cc (get_keyed_decl_scope): New function.
+ 	(trees_out::get_merge_kind): Use it.
+ 	(trees_out::key_mergeable): Use it.
+ 	(maybe_key_decl): Key to the containing type for all members.
+ 
  2025-10-14  Jason Merrill  <jason@redhat.com>
  
  	Backported from master:
diff -Nrcpad gcc-15-20251025/gcc/cp/decl.cc gcc-15-20251101/gcc/cp/decl.cc
*** gcc-15-20251025/gcc/cp/decl.cc	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/cp/decl.cc	Sat Nov  1 22:32:38 2025
*************** make_typename_type (tree context, tree n
*** 4546,4552 ****
  	   - the tag corresponds to a class-key or 'enum' so
  	     [basic.lookup.elab] applies, or
  	   - the tag corresponds to scope_type or tf_qualifying_scope is
! 	     set so [basic.lookup.qual]/1 applies.
  	 TODO: If we'd set/track the scope_type tag thoroughly on all
  	 TYPENAME_TYPEs that are followed by :: then we wouldn't need the
  	 tf_qualifying_scope flag.  */
--- 4546,4554 ----
  	   - the tag corresponds to a class-key or 'enum' so
  	     [basic.lookup.elab] applies, or
  	   - the tag corresponds to scope_type or tf_qualifying_scope is
! 	     set so [basic.lookup.qual]/1 applies, or
! 	   - we're inside a base-specifier so [class.derived.general]/2 applies;
! 	     the tag will already be class_type in that case.
  	 TODO: If we'd set/track the scope_type tag thoroughly on all
  	 TYPENAME_TYPEs that are followed by :: then we wouldn't need the
  	 tf_qualifying_scope flag.  */
diff -Nrcpad gcc-15-20251025/gcc/cp/module.cc gcc-15-20251101/gcc/cp/module.cc
*** gcc-15-20251025/gcc/cp/module.cc	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/cp/module.cc	Sat Nov  1 22:32:38 2025
*************** vec<tree, va_heap, vl_embed> *post_load_
*** 2789,2794 ****
--- 2789,2796 ----
  typedef hash_map<tree, auto_vec<tree>> keyed_map_t;
  static keyed_map_t *keyed_table;
  
+ static tree get_keyed_decl_scope (tree);
+ 
  /* Instantiations of temploid friends imported from another module
     need to be attached to the same module as the temploid.  This maps
     these decls to the temploid they are instantiated from, as there is
*************** trees_out::core_vals (tree t)
*** 6688,6693 ****
--- 6690,6696 ----
        WT (((lang_tree_node *)t)->baselink.binfo);
        WT (((lang_tree_node *)t)->baselink.functions);
        WT (((lang_tree_node *)t)->baselink.access_binfo);
+       WT (((lang_tree_node *)t)->baselink.common.chain);
        break;
  
      case CONSTRAINT_INFO:
*************** trees_in::core_vals (tree t)
*** 7257,7262 ****
--- 7260,7266 ----
        RT (((lang_tree_node *)t)->baselink.binfo);
        RTU (((lang_tree_node *)t)->baselink.functions);
        RT (((lang_tree_node *)t)->baselink.access_binfo);
+       RT (((lang_tree_node *)t)->baselink.common.chain);
        break;
  
      case CONSTRAINT_INFO:
*************** trees_out::get_merge_kind (tree decl, de
*** 11275,11294 ****
  	    if (DECL_IMPLICIT_TYPEDEF_P (STRIP_TEMPLATE (decl))
  		&& LAMBDA_TYPE_P (TREE_TYPE (decl)))
  	      {
! 		if (tree scope = LAMBDA_TYPE_EXTRA_SCOPE (TREE_TYPE (decl)))
! 		  {
! 		    /* Lambdas attached to fields are keyed to its class.  */
! 		    if (TREE_CODE (scope) == FIELD_DECL)
! 		      scope = TYPE_NAME (DECL_CONTEXT (scope));
! 		    if (DECL_LANG_SPECIFIC (scope)
! 			&& DECL_MODULE_KEYED_DECLS_P (scope))
! 		      {
! 			mk = MK_keyed;
! 			break;
! 		      }
! 		  }
! 		/* Lambdas not attached to any mangling scope are TU-local.  */
! 		mk = MK_unique;
  		break;
  	      }
  
--- 11279,11290 ----
  	    if (DECL_IMPLICIT_TYPEDEF_P (STRIP_TEMPLATE (decl))
  		&& LAMBDA_TYPE_P (TREE_TYPE (decl)))
  	      {
! 		if (get_keyed_decl_scope (decl))
! 		  mk = MK_keyed;
! 		else
! 		  /* Lambdas not attached to any mangling scope are TU-local
! 		     and so cannot be deduplicated.  */
! 		  mk = MK_unique;
  		break;
  	      }
  
*************** trees_out::key_mergeable (int tag, merge
*** 11589,11604 ****
  
  	case MK_keyed:
  	  {
! 	    gcc_checking_assert (LAMBDA_TYPE_P (TREE_TYPE (inner)));
! 	    tree scope = LAMBDA_TYPE_EXTRA_SCOPE (TREE_TYPE (inner));
! 	    gcc_checking_assert (TREE_CODE (scope) == VAR_DECL
! 				 || TREE_CODE (scope) == FIELD_DECL
! 				 || TREE_CODE (scope) == PARM_DECL
! 				 || TREE_CODE (scope) == TYPE_DECL
! 				 || TREE_CODE (scope) == CONCEPT_DECL);
! 	    /* Lambdas attached to fields are keyed to the class.  */
! 	    if (TREE_CODE (scope) == FIELD_DECL)
! 	      scope = TYPE_NAME (DECL_CONTEXT (scope));
  	    auto *root = keyed_table->get (scope);
  	    unsigned ix = root->length ();
  	    /* If we don't find it, we'll write a really big number
--- 11585,11593 ----
  
  	case MK_keyed:
  	  {
! 	    tree scope = get_keyed_decl_scope (inner);
! 	    gcc_checking_assert (scope);
! 
  	    auto *root = keyed_table->get (scope);
  	    unsigned ix = root->length ();
  	    /* If we don't find it, we'll write a really big number
*************** maybe_key_decl (tree ctx, tree decl)
*** 20916,20924 ****
        && TREE_CODE (ctx) != CONCEPT_DECL)
      return;
  
!   /* For fields, key it to the containing type to handle deduplication
!      correctly.  */
!   if (TREE_CODE (ctx) == FIELD_DECL)
      ctx = TYPE_NAME (DECL_CONTEXT (ctx));
  
    if (!keyed_table)
--- 20905,20925 ----
        && TREE_CODE (ctx) != CONCEPT_DECL)
      return;
  
!   /* For members, key it to the containing type to handle deduplication
!      correctly.  For fields, this is necessary as FIELD_DECLs have no
!      dep and so would only be streamed after the lambda type, defeating
!      our ability to merge them.
! 
!      Other class-scope key decls might depend on the type of the lambda
!      but be within the same cluster; we need to ensure that we never
!      first see the key decl while streaming the lambda type as merging
!      would then fail when comparing the partially-streamed lambda type
!      of the key decl with the existing (PR c++/122310).
! 
!      Perhaps sort_cluster can be adjusted to handle this better, but
!      this is a simple workaround (and might down on the number of
!      entries in keyed_table as a bonus).  */
!   while (DECL_CLASS_SCOPE_P (ctx))
      ctx = TYPE_NAME (DECL_CONTEXT (ctx));
  
    if (!keyed_table)
*************** maybe_key_decl (tree ctx, tree decl)
*** 20933,20938 ****
--- 20934,20963 ----
    vec.safe_push (decl);
  }
  
+ /* Find the scope that the lambda DECL is keyed to, if any.  */
+ 
+ static tree
+ get_keyed_decl_scope (tree decl)
+ {
+   gcc_checking_assert (LAMBDA_TYPE_P (TREE_TYPE (decl)));
+   tree scope = LAMBDA_TYPE_EXTRA_SCOPE (TREE_TYPE (decl));
+   if (!scope)
+     return NULL_TREE;
+ 
+   gcc_checking_assert (TREE_CODE (scope) == VAR_DECL
+ 		       || TREE_CODE (scope) == FIELD_DECL
+ 		       || TREE_CODE (scope) == PARM_DECL
+ 		       || TREE_CODE (scope) == TYPE_DECL
+ 		       || TREE_CODE (scope) == CONCEPT_DECL);
+ 
+   while (DECL_CLASS_SCOPE_P (scope))
+     scope = TYPE_NAME (DECL_CONTEXT (scope));
+ 
+   gcc_checking_assert (DECL_LANG_SPECIFIC (scope)
+ 		       && DECL_MODULE_KEYED_DECLS_P (scope));
+   return scope;
+ }
+ 
  /* DECL is an instantiated friend that should be attached to the same
     module that ORIG is.  */
  
diff -Nrcpad gcc-15-20251025/gcc/cp/parser.cc gcc-15-20251101/gcc/cp/parser.cc
*** gcc-15-20251025/gcc/cp/parser.cc	Sat Oct 25 22:32:29 2025
--- gcc-15-20251101/gcc/cp/parser.cc	Sat Nov  1 22:32:38 2025
*************** cp_parser_mem_initializer_id (cp_parser*
*** 18374,18380 ****
      return cp_parser_class_name (parser,
  				 /*typename_keyword_p=*/true,
  				 /*template_keyword_p=*/template_p,
! 				 typename_type,
  				 /*check_dependency_p=*/true,
  				 /*class_head_p=*/false,
  				 /*is_declaration=*/true);
--- 18374,18380 ----
      return cp_parser_class_name (parser,
  				 /*typename_keyword_p=*/true,
  				 /*template_keyword_p=*/template_p,
! 				 class_type,
  				 /*check_dependency_p=*/true,
  				 /*class_head_p=*/false,
  				 /*is_declaration=*/true);
*************** cp_parser_class_name (cp_parser *parser,
*** 27406,27413 ****
    /* If this is a typename, create a TYPENAME_TYPE.  */
    if (typename_p && decl != error_mark_node)
      {
!       decl = make_typename_type (scope, decl, typename_type,
! 				 /*complain=*/tf_error);
        if (decl != error_mark_node)
  	decl = TYPE_NAME (decl);
      }
--- 27406,27412 ----
    /* If this is a typename, create a TYPENAME_TYPE.  */
    if (typename_p && decl != error_mark_node)
      {
!       decl = make_typename_type (scope, decl, tag_type, /*complain=*/tf_error);
        if (decl != error_mark_node)
  	decl = TYPE_NAME (decl);
      }
*************** cp_parser_base_specifier (cp_parser* par
*** 29748,29754 ****
        type = cp_parser_class_name (parser,
  				   class_scope_p,
  				   template_p,
! 				   typename_type,
  				   /*check_dependency_p=*/true,
  				   /*class_head_p=*/false,
  				   /*is_declaration=*/true);
--- 29747,29753 ----
        type = cp_parser_class_name (parser,
  				   class_scope_p,
  				   template_p,
! 				   class_type,
  				   /*check_dependency_p=*/true,
  				   /*class_head_p=*/false,
  				   /*is_declaration=*/true);
diff -Nrcpad gcc-15-20251025/gcc/fortran/ChangeLog gcc-15-20251101/gcc/fortran/ChangeLog
*** gcc-15-20251025/gcc/fortran/ChangeLog	Sat Oct 25 22:32:30 2025
--- gcc-15-20251101/gcc/fortran/ChangeLog	Sat Nov  1 22:32:38 2025
***************
*** 1,3 ****
--- 1,21 ----
+ 2025-10-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/122206
+ 	* trans-types.cc (gfc_get_function_type): Do not clobber an
+ 	existing procedure interface.
+ 
+ 2025-10-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-10-04  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/107968
+ 	* trans-io.cc (gfc_trans_transfer): Also scalarize I/O of section
+ 	of an array pointer.
+ 
  2025-09-28  Harald Anlauf  <anlauf@gmx.de>
  
  	Backported from master:
diff -Nrcpad gcc-15-20251025/gcc/fortran/dependency.cc gcc-15-20251101/gcc/fortran/dependency.cc
*** gcc-15-20251025/gcc/fortran/dependency.cc	Sat Oct 25 22:32:30 2025
--- gcc-15-20251101/gcc/fortran/dependency.cc	Sat Nov  1 22:32:38 2025
*************** gfc_ref_needs_temporary_p (gfc_ref *ref)
*** 944,955 ****
  	   types), not in characters.  */
  	return subarray_p;
  
-       case REF_INQUIRY:
- 	/* Within an array reference, inquiry references of complex
- 	   variables generally need a temporary.  */
- 	return subarray_p;
- 
        case REF_COMPONENT:
  	break;
        }
  
--- 944,951 ----
  	   types), not in characters.  */
  	return subarray_p;
  
        case REF_COMPONENT:
+       case REF_INQUIRY:
  	break;
        }
  
diff -Nrcpad gcc-15-20251025/gcc/fortran/trans-expr.cc gcc-15-20251101/gcc/fortran/trans-expr.cc
*** gcc-15-20251025/gcc/fortran/trans-expr.cc	Sat Oct 25 22:32:30 2025
--- gcc-15-20251101/gcc/fortran/trans-expr.cc	Sat Nov  1 22:32:38 2025
*************** gfc_trans_pointer_assignment (gfc_expr *
*** 11222,11242 ****
  	  int dim;
  	  gcc_assert (remap->u.ar.dimen == expr1->rank);
  
  	  if (rank_remap)
  	    {
  	      /* Do rank remapping.  We already have the RHS's descriptor
  		 converted in rse and now have to build the correct LHS
  		 descriptor for it.  */
  
! 	      tree dtype, data, span;
  	      tree offs, stride;
  	      tree lbound, ubound;
  
- 	      /* Set dtype.  */
- 	      dtype = gfc_conv_descriptor_dtype (desc);
- 	      tmp = gfc_get_dtype (TREE_TYPE (desc));
- 	      gfc_add_modify (&block, dtype, tmp);
- 
  	      /* Copy data pointer.  */
  	      data = gfc_conv_descriptor_data_get (rse.expr);
  	      gfc_conv_descriptor_data_set (&block, desc, data);
--- 11222,11254 ----
  	  int dim;
  	  gcc_assert (remap->u.ar.dimen == expr1->rank);
  
+ 	  /* Always set dtype.  */
+ 	  tree dtype = gfc_conv_descriptor_dtype (desc);
+ 	  tmp = gfc_get_dtype (TREE_TYPE (desc));
+ 	  gfc_add_modify (&block, dtype, tmp);
+ 
+ 	  /* For unlimited polymorphic LHS use elem_len from RHS.  */
+ 	  if (UNLIMITED_POLY (expr1) && expr2->ts.type != BT_CLASS)
+ 	    {
+ 	      tree elem_len;
+ 	      tmp = TYPE_SIZE_UNIT (gfc_typenode_for_spec (&expr2->ts));
+ 	      elem_len = fold_convert (gfc_array_index_type, tmp);
+ 	      elem_len = gfc_evaluate_now (elem_len, &block);
+ 	      tmp = gfc_conv_descriptor_elem_len (desc);
+ 	      gfc_add_modify (&block, tmp,
+ 			      fold_convert (TREE_TYPE (tmp), elem_len));
+ 	    }
+ 
  	  if (rank_remap)
  	    {
  	      /* Do rank remapping.  We already have the RHS's descriptor
  		 converted in rse and now have to build the correct LHS
  		 descriptor for it.  */
  
! 	      tree data, span;
  	      tree offs, stride;
  	      tree lbound, ubound;
  
  	      /* Copy data pointer.  */
  	      data = gfc_conv_descriptor_data_get (rse.expr);
  	      gfc_conv_descriptor_data_set (&block, desc, data);
diff -Nrcpad gcc-15-20251025/gcc/fortran/trans-intrinsic.cc gcc-15-20251101/gcc/fortran/trans-intrinsic.cc
*** gcc-15-20251025/gcc/fortran/trans-intrinsic.cc	Sat Oct 25 22:32:30 2025
--- gcc-15-20251101/gcc/fortran/trans-intrinsic.cc	Sat Nov  1 22:32:38 2025
*************** gfc_conv_is_contiguous_expr (gfc_se *se,
*** 2315,2324 ****
--- 2315,2328 ----
    int i;
    tree fncall0;
    gfc_array_spec *as;
+   gfc_symbol *sym = NULL;
  
    if (arg->ts.type == BT_CLASS)
      gfc_add_class_array_ref (arg);
  
+   if (arg->expr_type == EXPR_VARIABLE)
+     sym = arg->symtree->n.sym;
+ 
    ss = gfc_walk_expr (arg);
    gcc_assert (ss != gfc_ss_terminator);
    gfc_init_se (&argse, NULL);
*************** gfc_conv_is_contiguous_expr (gfc_se *se,
*** 2341,2347 ****
        fncall0 = build_call_expr_loc (input_location,
  				     gfor_fndecl_is_contiguous0, 1, desc);
        se->expr = fncall0;
!       se->expr = convert (logical_type_node, se->expr);
      }
    else
      {
--- 2345,2351 ----
        fncall0 = build_call_expr_loc (input_location,
  				     gfor_fndecl_is_contiguous0, 1, desc);
        se->expr = fncall0;
!       se->expr = convert (boolean_type_node, se->expr);
      }
    else
      {
*************** gfc_conv_is_contiguous_expr (gfc_se *se,
*** 2373,2378 ****
--- 2377,2398 ----
  	}
        se->expr = cond;
      }
+ 
+   /* A pointer that does not have the CONTIGUOUS attribute needs to be checked
+      if it points to an array whose span differs from the element size.  */
+   if (as && sym && IS_POINTER(sym) && !sym->attr.contiguous)
+     {
+       tree span = gfc_conv_descriptor_span_get (desc);
+       tmp = fold_convert (TREE_TYPE (span),
+ 			  gfc_conv_descriptor_elem_len (desc));
+       cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
+ 			      span, tmp);
+       se->expr = fold_build2_loc (input_location, TRUTH_ANDIF_EXPR,
+ 				  boolean_type_node, cond,
+ 				  convert (boolean_type_node, se->expr));
+     }
+ 
+   gfc_free_ss_chain (ss);
  }
  
  
*************** gfc_conv_intrinsic_transfer (gfc_se * se
*** 8541,8553 ****
      }
    else
      {
        argse.want_pointer = 0;
        gfc_conv_expr_descriptor (&argse, arg->expr);
        source = gfc_conv_descriptor_data_get (argse.expr);
        source_type = gfc_get_element_type (TREE_TYPE (argse.expr));
  
        /* Repack the source if not simply contiguous.  */
!       if (!gfc_is_simply_contiguous (arg->expr, false, true))
  	{
  	  tmp = gfc_build_addr_expr (NULL_TREE, argse.expr);
  
--- 8561,8578 ----
      }
    else
      {
+       bool simply_contiguous = gfc_is_simply_contiguous (arg->expr,
+ 							 false, true);
        argse.want_pointer = 0;
+       /* A non-contiguous SOURCE needs packing.  */
+       if (!simply_contiguous)
+ 	argse.force_tmp = 1;
        gfc_conv_expr_descriptor (&argse, arg->expr);
        source = gfc_conv_descriptor_data_get (argse.expr);
        source_type = gfc_get_element_type (TREE_TYPE (argse.expr));
  
        /* Repack the source if not simply contiguous.  */
!       if (!simply_contiguous)
  	{
  	  tmp = gfc_build_addr_expr (NULL_TREE, argse.expr);
  
diff -Nrcpad gcc-15-20251025/gcc/testsuite/ChangeLog gcc-15-20251101/gcc/testsuite/ChangeLog
*** gcc-15-20251025/gcc/testsuite/ChangeLog	Sat Oct 25 22:32:31 2025
--- gcc-15-20251101/gcc/testsuite/ChangeLog	Sat Nov  1 22:32:40 2025
***************
*** 1,3 ****
--- 1,112 ----
+ 2025-10-31  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-10-27  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/122408
+ 	* gfortran.target/aarch64/pr122408_1.f90: New test.
+ 	* gfortran.target/aarch64/pr122408_2.f90: New test.
+ 
+ 2025-10-31  Jinyang He  <hejinyang@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-10-30  Jinyang He  <hejinyang@loongson.cn>
+ 		    Peng Fan  <fanpeng@loongson.cn>
+ 
+ 	* gcc.target/loongarch/conditional-move-opt-1.c: Remove mul.
+ 	* gcc.target/loongarch/conditional-move-opt-2.c: Remove and.
+ 	* gcc.target/loongarch/conditional-move-opt-3.c: New test.
+ 
+ 2025-10-30  Guo Jie  <guojie@loongson.cn>
+ 
+ 	Backported from master:
+ 	2025-10-30  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* gcc.target/loongarch/fnmam4-vec.c: New test.
+ 
+ 2025-10-28  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-14  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/122192
+ 	* g++.dg/template/dependent-base6.C: Verify mem-initializer-id
+ 	qualified name lookup is type-only too.
+ 
+ 2025-10-28  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-10-10  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/122192
+ 	* g++.dg/template/dependent-base6.C: New test.
+ 
+ 2025-10-28  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-10-27  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122310
+ 	* g++.dg/modules/lambda-12.h: New test.
+ 	* g++.dg/modules/lambda-12_a.H: New test.
+ 	* g++.dg/modules/lambda-12_b.C: New test.
+ 
+ 2025-10-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR tree-optimization/122394
+ 	* g++.dg/opt/pr122394.C: New test.
+ 
+ 2025-10-27  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	Backported from master:
+ 	2025-10-13  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR target/120674
+ 	* gcc.target/riscv/pr120674.c: New test.
+ 
+ 2025-10-27  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-10-17  Tamar Christina  <tamar.christina@arm.com>
+ 		    Jennifer Schmitz  <jschmitz@nvidia.com>
+ 
+ 	PR target/121604
+ 	* gcc.target/aarch64/sve/pr121604_brk.c: New test.
+ 	* gcc.target/aarch64/sve2/pr121604_pmov.c: New test.
+ 
+ 2025-10-27  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-10-27  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/122323
+ 	* gcc.target/i386/builtin-copysign-8b.c: Add -mtune=generic.
+ 
+ 2025-10-26  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	Backported from master:
+ 	2025-10-26  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR target/121599
+ 	* gcc.target/aarch64/sve2/pr121599.c: Tolerate alterate insn
+ 	selection.
+ 
+ 2025-10-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-10-09  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/122206
+ 	* gfortran.dg/interface_abstract_6.f90: New test.
+ 
+ 2025-10-25  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-10-04  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/107968
+ 	* gfortran.dg/implied_do_io_9.f90: New test.
+ 
  2025-10-24  H.J. Lu  <hjl.tools@gmail.com>
  
  	Backported from master:
diff -Nrcpad gcc-15-20251025/gcc/testsuite/g++.dg/modules/convop-2_a.H gcc-15-20251101/gcc/testsuite/g++.dg/modules/convop-2_a.H
*** gcc-15-20251025/gcc/testsuite/g++.dg/modules/convop-2_a.H	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/g++.dg/modules/convop-2_a.H	Sat Nov  1 22:32:46 2025
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/122381
+ // { dg-additional-options "-fmodule-header" }
+ // { dg-module-cmi {} }
+ 
+ template <typename T> struct color_ref {
+   operator int() const { return 0; }
+   int foo(color_ref x) {
+     return x.operator int();
+   }
+ };
diff -Nrcpad gcc-15-20251025/gcc/testsuite/g++.dg/modules/convop-2_b.C gcc-15-20251101/gcc/testsuite/g++.dg/modules/convop-2_b.C
*** gcc-15-20251025/gcc/testsuite/g++.dg/modules/convop-2_b.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/g++.dg/modules/convop-2_b.C	Sat Nov  1 22:32:46 2025
***************
*** 0 ****
--- 1,5 ----
+ // PR c++/122381
+ // { dg-additional-options "-fmodules" }
+ 
+ import "convop-2_a.H";
+ template struct color_ref<int>;
diff -Nrcpad gcc-15-20251025/gcc/testsuite/g++.dg/modules/lambda-12.h gcc-15-20251101/gcc/testsuite/g++.dg/modules/lambda-12.h
*** gcc-15-20251025/gcc/testsuite/g++.dg/modules/lambda-12.h	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/g++.dg/modules/lambda-12.h	Sat Nov  1 22:32:47 2025
***************
*** 0 ****
--- 1,27 ----
+ // PR c++/122310
+ struct Foo {
+   constexpr static inline auto do_nothing = [](auto && ...){};
+   using TNothing = decltype(do_nothing);
+ };
+ 
+ template <typename T>
+ struct X {
+   struct Inner {
+     union MoreInner {
+       static constexpr auto x = []{};
+ #if __cplusplus >= 202002L
+       static decltype([]{}) y;
+ #endif
+     };
+   };
+ 
+   using A = decltype(Inner::MoreInner::x);
+ #if __cplusplus >= 202002L
+   using B = decltype(Inner::MoreInner::y);
+ #endif
+ };
+ 
+ inline X<int>::A* a{};
+ #if __cplusplus >= 202002L
+ inline X<int>::B* b{};
+ #endif
diff -Nrcpad gcc-15-20251025/gcc/testsuite/g++.dg/modules/lambda-12_a.H gcc-15-20251101/gcc/testsuite/g++.dg/modules/lambda-12_a.H
*** gcc-15-20251025/gcc/testsuite/g++.dg/modules/lambda-12_a.H	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/g++.dg/modules/lambda-12_a.H	Sat Nov  1 22:32:47 2025
***************
*** 0 ****
--- 1,5 ----
+ // PR c++/122310
+ // { dg-additional-options "-fmodule-header" }
+ // { dg-module-cmi {} }
+ 
+ #include "lambda-12.h"
diff -Nrcpad gcc-15-20251025/gcc/testsuite/g++.dg/modules/lambda-12_b.C gcc-15-20251101/gcc/testsuite/g++.dg/modules/lambda-12_b.C
*** gcc-15-20251025/gcc/testsuite/g++.dg/modules/lambda-12_b.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/g++.dg/modules/lambda-12_b.C	Sat Nov  1 22:32:47 2025
***************
*** 0 ****
--- 1,5 ----
+ // PR c++/122310
+ // { dg-additional-options "-fmodules -fno-module-lazy" }
+ 
+ #include "lambda-12.h"
+ import "lambda-12_a.H";
diff -Nrcpad gcc-15-20251025/gcc/testsuite/g++.dg/opt/pr122394.C gcc-15-20251101/gcc/testsuite/g++.dg/opt/pr122394.C
*** gcc-15-20251025/gcc/testsuite/g++.dg/opt/pr122394.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/g++.dg/opt/pr122394.C	Sat Nov  1 22:32:47 2025
***************
*** 0 ****
--- 1,20 ----
+ // PR tree-optimization/122394
+ // { dg-do compile { target c++23 } }
+ // { dg-options "-O1 -g" }
+ 
+ #include <compare>
+ 
+ struct A {
+   friend auto operator<=> (A, A) = default;
+   double a;
+ };
+ void foo ();
+ A b, c;
+ 
+ void
+ bar ()
+ {
+   bool d = c >= b;
+   if (d)
+     foo ();
+ }
diff -Nrcpad gcc-15-20251025/gcc/testsuite/g++.dg/template/dependent-base6.C gcc-15-20251101/gcc/testsuite/g++.dg/template/dependent-base6.C
*** gcc-15-20251025/gcc/testsuite/g++.dg/template/dependent-base6.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/g++.dg/template/dependent-base6.C	Sat Nov  1 22:32:48 2025
***************
*** 0 ****
--- 1,14 ----
+ // PR c++/122192
+ // Verify name lookup within a base-specifier is type-only.
+ 
+ struct A {
+   int B;
+   struct B { };
+ };
+ 
+ struct S1 : A::B { }; // OK
+ 
+ template<class T> struct S2 : T::B { // OK, used to fail
+   S2() : T::B() { } // Also OK
+ };
+ template struct S2<A>;
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gcc.target/aarch64/sve/pr121604_brk.c gcc-15-20251101/gcc/testsuite/gcc.target/aarch64/sve/pr121604_brk.c
*** gcc-15-20251025/gcc/testsuite/gcc.target/aarch64/sve/pr121604_brk.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/gcc.target/aarch64/sve/pr121604_brk.c	Sat Nov  1 22:33:27 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ /*
+ ** foo:
+ **	ptrue	p0\.b, all
+ **	brkb	p0\.b, p0/z, p0\.b
+ **	ret
+ */
+ svbool_t foo () {
+   return svbrkb_b_m (svpfalse (), svptrue_b8 (), svptrue_b8 ());
+ }
+ 
+ /*
+ ** bar:
+ **	ptrue	p0\.b, all
+ **	brka	p0\.b, p0/z, p0\.b
+ **	ret
+ */
+ svbool_t bar () {
+   return svbrka_b_m (svpfalse (), svptrue_b8 (), svptrue_b8 ());
+ }
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c gcc-15-20251101/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c
*** gcc-15-20251025/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c	Sat Oct 25 22:32:41 2025
--- gcc-15-20251101/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c	Sat Nov  1 22:33:33 2025
***************
*** 7,13 ****
  
  /*
  ** foo:
! **	movi	d([0-9]+), #0
  **	movprfx	z0\.b, p0/z, z0\.b
  **	usqadd	z0\.b, p0/m, z0\.b, z\1\.b
  **	ret
--- 7,13 ----
  
  /*
  ** foo:
! **	movi?	[vdz]([0-9]+)\.?b?, #0
  **	movprfx	z0\.b, p0/z, z0\.b
  **	usqadd	z0\.b, p0/m, z0\.b, z\1\.b
  **	ret
*************** svuint8_t foo (svbool_t pg, svuint8_t op
*** 19,25 ****
  
  /*
  ** bar:
! **	movi	d([0-9]+), #0
  **	movprfx	z0\.b, p0/z, z0\.b
  **	suqadd	z0\.b, p0/m, z0\.b, z\1\.b
  **	ret
--- 19,25 ----
  
  /*
  ** bar:
! **	movi?	[vdz]([0-9]+)\.?b?, #0
  **	movprfx	z0\.b, p0/z, z0\.b
  **	suqadd	z0\.b, p0/m, z0\.b, z\1\.b
  **	ret
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gcc.target/aarch64/sve2/pr121604_pmov.c gcc-15-20251101/gcc/testsuite/gcc.target/aarch64/sve2/pr121604_pmov.c
*** gcc-15-20251025/gcc/testsuite/gcc.target/aarch64/sve2/pr121604_pmov.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/gcc.target/aarch64/sve2/pr121604_pmov.c	Sat Nov  1 22:33:33 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=armv8.2-a+sve2p1" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #include <arm_sve.h>
+ 
+ /*
+ ** f:
+ **	pfalse	p([0-7]+)\.b
+ **	mov	z0\.b, #-1
+ **	pmov	z0\[1\], p\1\.d
+ **	ret
+ */
+ svuint64_t f () {
+     return svpmov_lane_u64_m (svdup_u64 (~0UL), svpfalse (), 1);
+ }
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gcc.target/i386/builtin-copysign-8b.c gcc-15-20251101/gcc/testsuite/gcc.target/i386/builtin-copysign-8b.c
*** gcc-15-20251025/gcc/testsuite/gcc.target/i386/builtin-copysign-8b.c	Sat Oct 25 22:32:43 2025
--- gcc-15-20251101/gcc/testsuite/gcc.target/i386/builtin-copysign-8b.c	Sat Nov  1 22:33:37 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx512f -mavx" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mno-avx512f -mavx -mtune=generic" } */
  /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
  /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
  
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-1.c gcc-15-20251101/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-1.c
*** gcc-15-20251025/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-1.c	Sat Oct 25 22:32:43 2025
--- gcc-15-20251101/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-1.c	Sat Nov  1 22:33:37 2025
*************** void
*** 27,33 ****
  test_lt ()
  {
    if (lm < ln)
!     lr *= (1 << 16);
    lr += lm;
  }
  
--- 27,33 ----
  test_lt ()
  {
    if (lm < ln)
!     lr += (1 << 16);
    lr += lm;
  }
  
*************** void
*** 35,41 ****
  test_le ()
  {
    if (lm <= ln)
!     lr = lm * ((long)1 << 32);
    else
      lr = lm;
    lr += lm;
--- 35,41 ----
  test_le ()
  {
    if (lm <= ln)
!     lr = lm + ((long)1 << 32);
    else
      lr = lm;
    lr += lm;
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-2.c gcc-15-20251101/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-2.c
*** gcc-15-20251025/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-2.c	Sat Oct 25 22:32:43 2025
--- gcc-15-20251101/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-2.c	Sat Nov  1 22:33:37 2025
*************** void
*** 29,35 ****
  test_lez ()
  {
    if (lm <= 0)
!     lr &= (1 << 16);
    lr += lm;
  }
  
--- 29,35 ----
  test_lez ()
  {
    if (lm <= 0)
!     lr |= (1 << 16);
    lr += lm;
  }
  
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-3.c gcc-15-20251101/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-3.c
*** gcc-15-20251025/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-3.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-3.c	Sat Nov  1 22:33:37 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { scan-assembler "maskeqz" } } */
+ /* { dg-final { scan-assembler "masknez" } } */
+ 
+ extern long lm, ln, lr;
+ 
+ void
+ test_and ()
+ {
+   if (lm < 0)
+     lr &= (1 << 16);
+   lr += lm;
+ }
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c gcc-15-20251101/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c
*** gcc-15-20251025/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c	Sat Nov  1 22:33:37 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -mlasx -ftree-vectorize" } */
+ /* { dg-require-effective-target loongarch_asx } */
+ 
+ void
+ foo (float *u, float x, float *y, float z)
+ {
+   int i;
+   for (i = 0; i < 1024; i++)
+     *(u++) = (x - y[i] * z);
+ }
+ 
+ /* { dg-final { scan-assembler-not "\tvori.b"} } */
+ /* { dg-final { scan-assembler-not "\txvori.b"} } */
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gcc.target/riscv/pr120674.c gcc-15-20251101/gcc/testsuite/gcc.target/riscv/pr120674.c
*** gcc-15-20251025/gcc/testsuite/gcc.target/riscv/pr120674.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/gcc.target/riscv/pr120674.c	Sat Nov  1 22:33:41 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-g -w -march=rv32gcv -mabi=ilp32" { target rv32 } } */
+ /* { dg-additional-options "-g -w -march=rv64gcv -mabi=lp64d" { target rv64 } } */
+ 
+ #pragma riscv intrinsic "vector"
+ void GB_AxB_saxpy5_unrolled_rvv() { vfloat64m8_t vc; }
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gfortran.dg/is_contiguous_5.f90 gcc-15-20251101/gcc/testsuite/gfortran.dg/is_contiguous_5.f90
*** gcc-15-20251025/gcc/testsuite/gfortran.dg/is_contiguous_5.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/gfortran.dg/is_contiguous_5.f90	Sat Nov  1 22:33:50 2025
***************
*** 0 ****
--- 1,126 ----
+ ! { dg-do run }
+ ! PR fortran/114023 - IS_CONTIGUOUS and pointers to non-contiguous targets
+ !
+ ! Based on testcase by Federico Perini
+ 
+ program main
+   implicit none
+   complex, parameter :: cvals(*) = [(1,-1),(2,-2),(3,-3)]
+   complex             , target :: cref(size(cvals)) = cvals  ! Reference
+   complex, allocatable, target :: carr(:)                    ! Test
+ 
+   type cx
+      real :: re, im
+   end type cx
+   type(cx), parameter :: tvals(*)  = [cx(1,-1),cx(2,-2),cx(3,-3)]
+   real, parameter     :: expect(*) = tvals% re
+   type(cx)             , target :: tref(size(cvals)) = tvals ! Reference
+   type(cx), allocatable, target :: tarr(:)
+ 
+   real,     pointer  :: rr1(:), rr2(:), rr3(:), rr4(:)
+   class(*), pointer  :: cp1(:), cp2(:), cp3(:), cp4(:)
+ 
+   carr = cvals
+   tarr = tvals
+ 
+   if (any (expect /= [1,2,3])) error stop 90
+ 
+   ! REAL pointer to non-contiguous effective target
+   rr1(1:3) => cref%re
+   rr2      => cref%re
+   rr3(1:3) => carr%re
+   rr4      => carr%re
+ 
+   if (is_contiguous      (rr1))          stop 1
+   if (my_contiguous_real (rr1))          stop 2
+   if (is_contiguous      (cref(1:3)%re)) stop 3
+ ! if (my_contiguous_real (cref(1:3)%re)) stop 4     ! pr122397
+ 
+   if (is_contiguous      (rr3))          stop 6
+   if (my_contiguous_real (rr3))          stop 7
+   if (is_contiguous      (carr(1:3)%re)) stop 8
+ ! if (my_contiguous_real (carr(1:3)%re)) stop 9
+ 
+   if (is_contiguous      (rr2))     stop 11
+   if (my_contiguous_real (rr2))     stop 12
+   if (is_contiguous      (cref%re)) stop 13
+ ! if (my_contiguous_real (cref%re)) stop 14
+ 
+   if (is_contiguous      (rr4))     stop 16
+   if (my_contiguous_real (rr4))     stop 17
+   if (is_contiguous      (carr%re)) stop 18
+ ! if (my_contiguous_real (carr%re)) stop 19
+ 
+   rr1(1:3) => tref%re
+   rr2      => tref%re
+   rr3(1:3) => tarr%re
+   rr4      => tarr%re
+ 
+   if (is_contiguous      (rr1))          stop 21
+   if (my_contiguous_real (rr1))          stop 22
+   if (is_contiguous      (tref(1:3)%re)) stop 23
+ ! if (my_contiguous_real (tref(1:3)%re)) stop 24
+ 
+   if (is_contiguous      (rr3))          stop 26
+   if (my_contiguous_real (rr3))          stop 27
+   if (is_contiguous      (tarr(1:3)%re)) stop 28
+ ! if (my_contiguous_real (tarr(1:3)%re)) stop 29
+ 
+   if (is_contiguous      (rr2))     stop 31
+   if (my_contiguous_real (rr2))     stop 32
+   if (is_contiguous      (tref%re)) stop 33
+ ! if (my_contiguous_real (tref%re)) stop 34
+ 
+   if (is_contiguous      (rr4))     stop 36
+   if (my_contiguous_real (rr4))     stop 37
+   if (is_contiguous      (tarr%re)) stop 38
+ ! if (my_contiguous_real (tarr%re)) stop 39
+ 
+   ! Unlimited polymorphic pointer to non-contiguous effective target
+   cp1(1:3) => cref%re
+   cp2      => cref%re
+   cp3(1:3) => carr%re
+   cp4      => carr%re
+ 
+   if (is_contiguous      (cp1)) stop 41
+   if (my_contiguous_poly (cp1)) stop 42
+   if (is_contiguous      (cp2)) stop 43
+   if (my_contiguous_poly (cp2)) stop 44
+   if (is_contiguous      (cp3)) stop 45
+   if (my_contiguous_poly (cp3)) stop 46
+   if (is_contiguous      (cp4)) stop 47
+   if (my_contiguous_poly (cp4)) stop 48
+ 
+   cp1(1:3) => tref%re
+   cp2      => tref%re
+   cp3(1:3) => tarr%re
+   cp4      => tarr%re
+ 
+   if (is_contiguous      (cp1)) stop 51
+   if (my_contiguous_poly (cp1)) stop 52
+   if (is_contiguous      (cp2)) stop 53
+   if (my_contiguous_poly (cp2)) stop 54
+   if (is_contiguous      (cp3)) stop 55
+   if (my_contiguous_poly (cp3)) stop 56
+   if (is_contiguous      (cp4)) stop 57
+   if (my_contiguous_poly (cp4)) stop 58
+ 
+   deallocate (carr, tarr)
+ contains
+   pure logical function my_contiguous_real (x) result (res)
+     real, pointer, intent(in) :: x(:)
+     res = is_contiguous (x)
+     if (any (x /= expect)) error stop 97
+   end function my_contiguous_real
+ 
+   pure logical function my_contiguous_poly (x) result (res)
+     class(*), pointer, intent(in) :: x(:)
+     res = is_contiguous (x)
+     select type (x)
+     type is (real)
+        if (any (x /= expect)) error stop 98
+     class default
+        error stop 99
+     end select
+   end function my_contiguous_poly
+ end
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gfortran.dg/transfer_array_subref_2.f90 gcc-15-20251101/gcc/testsuite/gfortran.dg/transfer_array_subref_2.f90
*** gcc-15-20251025/gcc/testsuite/gfortran.dg/transfer_array_subref_2.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/gfortran.dg/transfer_array_subref_2.f90	Sat Nov  1 22:33:51 2025
***************
*** 0 ****
--- 1,52 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O2 -fdump-tree-optimized" }
+ !
+ ! PR fortran/122386 - passing of component ref of nested DT array to TRANSFER
+ 
+ program main
+   implicit none
+   integer, parameter :: dp = 4
+ 
+   type cx
+      real(dp) :: re, im
+   end type cx
+ 
+   type complex_wrap1
+      type(cx) :: z(2)
+   end type complex_wrap1
+ 
+   type complex_wrap2
+      type(cx), dimension(:), allocatable :: z
+   end type complex_wrap2
+ 
+   type(complex_wrap1) :: x = complex_wrap1([cx(1,2), cx(3,4)])
+   type(complex_wrap2) :: w
+ 
+   w%z = x%z
+ 
+   ! The following statements should get optimized away...
+   if (size (transfer ( x%z%re ,[1.0_dp])) /= 2) error stop 1
+   if (size (transfer ((x%z%re),[1.0_dp])) /= 2) error stop 2
+   if (size (transfer ([x%z%re],[1.0_dp])) /= 2) error stop 3
+   if (size (transfer ( x%z%im ,[1.0_dp])) /= 2) error stop 4
+   if (size (transfer ((x%z%im),[1.0_dp])) /= 2) error stop 5
+   if (size (transfer ([x%z%im],[1.0_dp])) /= 2) error stop 6
+ 
+   ! ... while the following may not:
+   if (any  (transfer ( x%z%re ,[1.0_dp])  /= x%z%re)) stop 7
+   if (any  (transfer ( x%z%im ,[1.0_dp])  /= x%z%im)) stop 8
+ 
+   if (size (transfer ( w%z%re ,[1.0_dp])) /= 2) stop 11
+   if (size (transfer ((w%z%re),[1.0_dp])) /= 2) stop 12
+   if (size (transfer ([w%z%re],[1.0_dp])) /= 2) stop 13
+   if (size (transfer ( w%z%im ,[1.0_dp])) /= 2) stop 14
+   if (size (transfer ((w%z%im),[1.0_dp])) /= 2) stop 15
+   if (size (transfer ([w%z%im],[1.0_dp])) /= 2) stop 16
+ 
+   if (any  (transfer ( w%z%re ,[1.0_dp])  /= x%z%re)) stop 17
+   if (any  (transfer ( w%z%im ,[1.0_dp])  /= x%z%im)) stop 18
+ 
+   deallocate (w%z)
+ end program main
+ 
+ ! { dg-final { scan-tree-dump-not "_gfortran_error_stop_numeric" "optimized" } }
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90 gcc-15-20251101/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90
*** gcc-15-20251025/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/gfortran.target/aarch64/pr122408_1.f90	Sat Nov  1 22:33:51 2025
***************
*** 0 ****
--- 1,61 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-O2 -march=armv8.3-a" }
+ 
+ subroutine c_add_ab(n, a, c, b)         ! C += A * B
+   use iso_fortran_env, only: real64
+   implicit none
+   !GCC$ ATTRIBUTES noinline :: c_add_ab
+   integer, intent(in) :: n
+   complex(real64), intent(in)    :: a
+   complex(real64), intent(inout) :: c(*)
+   complex(real64), intent(in)    :: b(*)
+   integer :: k
+   do k = 1, n
+     c(k) = c(k) + a * b(k)
+   end do
+ end subroutine c_add_ab
+ 
+ subroutine c_sub_ab(n, a, c, b)         ! C -= A * B
+   use iso_fortran_env, only: real64
+   implicit none
+   !GCC$ ATTRIBUTES noinline :: c_sub_ab
+   integer, intent(in) :: n
+   complex(real64), intent(in)    :: a
+   complex(real64), intent(inout) :: c(*)
+   complex(real64), intent(in)    :: b(*)
+   integer :: k
+   do k = 1, n
+     c(k) = c(k) - a * b(k)
+   end do
+ end subroutine c_sub_ab
+ 
+ subroutine c_add_a_conjb(n, a, c, b)    ! C += A * conj(B)
+   use iso_fortran_env, only: real64
+   implicit none
+   !GCC$ ATTRIBUTES noinline :: c_add_a_conjb
+   integer, intent(in) :: n
+   complex(real64), intent(in)    :: a
+   complex(real64), intent(inout) :: c(*)
+   complex(real64), intent(in)    :: b(*)
+   integer :: k
+   do k = 1, n
+     c(k) = c(k) + a * conjg(b(k))
+   end do
+ end subroutine c_add_a_conjb
+ 
+ subroutine c_sub_a_conjb(n, a, c, b)    ! C -= A * conj(B)
+   use iso_fortran_env, only: real64
+   implicit none
+   !GCC$ ATTRIBUTES noinline :: c_sub_a_conjb
+   integer, intent(in) :: n
+   complex(real64), intent(in)    :: a
+   complex(real64), intent(inout) :: c(*)
+   complex(real64), intent(in)    :: b(*)
+   integer :: k
+   do k = 1, n
+     c(k) = c(k) - a * conjg(b(k))
+   end do
+ end subroutine c_sub_a_conjb
+ 
+ ! { dg-final { scan-assembler-times {fcmla\s+v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d, #0} 2 } }
+ ! { dg-final { scan-assembler-times {fcmla\s+v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d, #270} 2 } }
diff -Nrcpad gcc-15-20251025/gcc/testsuite/gfortran.target/aarch64/pr122408_2.f90 gcc-15-20251101/gcc/testsuite/gfortran.target/aarch64/pr122408_2.f90
*** gcc-15-20251025/gcc/testsuite/gfortran.target/aarch64/pr122408_2.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20251101/gcc/testsuite/gfortran.target/aarch64/pr122408_2.f90	Sat Nov  1 22:33:51 2025
***************
*** 0 ****
--- 1,140 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O2" }
+ ! { dg-additional-options "-O2 -march=armv8.3-a" { target arm_v8_3a_complex_neon_hw } }
+ 
+ module util
+   use iso_fortran_env, only: real64, int64
+   implicit none
+ contains
+   pure logical function bitwise_eq(x, y)
+     complex(real64), intent(in) :: x, y
+     integer(int64) :: xr, xi, yr, yi
+     xr = transfer(real(x,kind=real64), 0_int64)
+     xi = transfer(aimag(x),             0_int64)
+     yr = transfer(real(y,kind=real64),  0_int64)
+     yi = transfer(aimag(y),              0_int64)
+     bitwise_eq = (xr == yr) .and. (xi == yi)
+   end function bitwise_eq
+ 
+   subroutine check_equal(tag, got, ref, nfail)
+     character(*), intent(in) :: tag
+     complex(real64), intent(in) :: got(:), ref(:)
+     integer, intent(inout) :: nfail
+     integer :: i
+     do i = 1, size(got)
+       if (.not. bitwise_eq(got(i), ref(i))) then
+         nfail = nfail + 1
+         write(*,'(A,": mismatch at i=",I0, "  got=",2ES16.8,"  ref=",2ES16.8)') &
+              trim(tag), i, real(got(i)), aimag(got(i)), real(ref(i)), aimag(ref(i))
+       end if
+     end do
+   end subroutine check_equal
+ end module util
+ 
+ module fcmla_ops
+   use iso_fortran_env, only: real64
+   implicit none
+ contains
+   subroutine c_add_ab(n, a, c, b)         ! C += A * B
+     !GCC$ ATTRIBUTES noinline :: c_add_ab
+     integer, intent(in) :: n
+     complex(real64), intent(in)    :: a
+     complex(real64), intent(inout) :: c(*)
+     complex(real64), intent(in)    :: b(*)
+     integer :: k
+     do k = 1, n
+       c(k) = c(k) + a * b(k)
+     end do
+   end subroutine c_add_ab
+ 
+   subroutine c_sub_ab(n, a, c, b)         ! C -= A * B
+     !GCC$ ATTRIBUTES noinline :: c_sub_ab
+     integer, intent(in) :: n
+     complex(real64), intent(in)    :: a
+     complex(real64), intent(inout) :: c(*)
+     complex(real64), intent(in)    :: b(*)
+     integer :: k
+     do k = 1, n
+       c(k) = c(k) - a * b(k)
+     end do
+   end subroutine c_sub_ab
+ 
+   subroutine c_add_a_conjb(n, a, c, b)    ! C += A * conj(B)
+     !GCC$ ATTRIBUTES noinline :: c_add_a_conjb
+     integer, intent(in) :: n
+     complex(real64), intent(in)    :: a
+     complex(real64), intent(inout) :: c(*)
+     complex(real64), intent(in)    :: b(*)
+     integer :: k
+     do k = 1, n
+       c(k) = c(k) + a * conjg(b(k))
+     end do
+   end subroutine c_add_a_conjb
+ 
+   subroutine c_sub_a_conjb(n, a, c, b)    ! C -= A * conj(B)
+     !GCC$ ATTRIBUTES noinline :: c_sub_a_conjb
+     integer, intent(in) :: n
+     complex(real64), intent(in)    :: a
+     complex(real64), intent(inout) :: c(*)
+     complex(real64), intent(in)    :: b(*)
+     integer :: k
+     do k = 1, n
+       c(k) = c(k) - a * conjg(b(k))
+     end do
+   end subroutine c_sub_a_conjb
+ end module fcmla_ops
+ 
+ program fcmla_accum_pairs
+   use iso_fortran_env, only: real64
+   use util
+   use fcmla_ops
+   implicit none
+ 
+   integer, parameter :: n = 4
+   complex(real64) :: a, b(n), c0(n)
+   complex(real64) :: c_add_ab_got(n),      c_add_ab_ref(n)
+   complex(real64) :: c_sub_ab_got(n),      c_sub_ab_ref(n)
+   complex(real64) :: c_add_conjb_got(n),   c_add_conjb_ref(n)
+   complex(real64) :: c_sub_conjb_got(n),   c_sub_conjb_ref(n)
+   integer :: i, fails
+ 
+   ! Constants (include a signed-zero lane)
+   a    = cmplx( 2.0_real64, -3.0_real64, kind=real64)
+   b(1) = cmplx( 1.5_real64, -2.0_real64, kind=real64)
+   b(2) = cmplx(-4.0_real64,  5.0_real64, kind=real64)
+   b(3) = cmplx(-0.0_real64,  0.0_real64, kind=real64)
+   b(4) = cmplx( 0.25_real64, 3.0_real64, kind=real64)
+ 
+   c0(1) = cmplx( 1.0_real64, -2.0_real64, kind=real64)
+   c0(2) = cmplx( 3.0_real64, -4.0_real64, kind=real64)
+   c0(3) = cmplx(-5.0_real64,  6.0_real64, kind=real64)
+   c0(4) = cmplx( 0.0_real64,  0.0_real64, kind=real64)
+ 
+   ! Run each form
+   c_add_ab_got    = c0; call c_add_ab     (n, a, c_add_ab_got,    b)
+   c_sub_ab_got    = c0; call c_sub_ab     (n, a, c_sub_ab_got,    b)
+   c_add_conjb_got = c0; call c_add_a_conjb(n, a, c_add_conjb_got, b)
+   c_sub_conjb_got = c0; call c_sub_a_conjb(n, a, c_sub_conjb_got, b)
+ 
+   ! Scalar references
+   do i = 1, n
+     c_add_ab_ref(i)    = c0(i) + a * b(i)
+     c_sub_ab_ref(i)    = c0(i) - a * b(i)
+     c_add_conjb_ref(i) = c0(i) + a * conjg(b(i))
+     c_sub_conjb_ref(i) = c0(i) - a * conjg(b(i))
+   end do
+ 
+   ! Bitwise checks
+   fails = 0
+   call check_equal("C +=  A*B       ", c_add_ab_got,    c_add_ab_ref,    fails)
+   call check_equal("C -=  A*B       ", c_sub_ab_got,    c_sub_ab_ref,    fails)
+   call check_equal("C +=  A*conj(B) ", c_add_conjb_got, c_add_conjb_ref, fails)
+   call check_equal("C -=  A*conj(B) ", c_sub_conjb_got, c_sub_conjb_ref, fails)
+ 
+   if (fails == 0) then
+     stop 0
+   else
+     stop 1
+   end if
+ end program fcmla_accum_pairs
+ 
diff -Nrcpad gcc-15-20251025/gcc/tree-ssa-phiopt.cc gcc-15-20251101/gcc/tree-ssa-phiopt.cc
*** gcc-15-20251025/gcc/tree-ssa-phiopt.cc	Sat Oct 25 22:32:55 2025
--- gcc-15-20251101/gcc/tree-ssa-phiopt.cc	Sat Nov  1 22:34:15 2025
*************** spaceship_replacement (basic_block cond_
*** 2995,3004 ****
  	      if (has_cast_debug_uses
  		  || (HONOR_NANS (TREE_TYPE (lhs1)) && !is_cast))
  		{
! 		  tree temp3 = make_node (DEBUG_EXPR_DECL);
! 		  DECL_ARTIFICIAL (temp3) = 1;
! 		  TREE_TYPE (temp3) = TREE_TYPE (orig_use_lhs);
! 		  SET_DECL_MODE (temp3, TYPE_MODE (type));
  		  if (has_cast_debug_uses)
  		    t = fold_convert (TREE_TYPE (temp3), temp2);
  		  else
--- 2995,3002 ----
  	      if (has_cast_debug_uses
  		  || (HONOR_NANS (TREE_TYPE (lhs1)) && !is_cast))
  		{
! 		  tree temp3
! 		    = build_debug_expr_decl (TREE_TYPE (orig_use_lhs));
  		  if (has_cast_debug_uses)
  		    t = fold_convert (TREE_TYPE (temp3), temp2);
  		  else
diff -Nrcpad gcc-15-20251025/gcc/tree-vect-slp-patterns.cc gcc-15-20251101/gcc/tree-vect-slp-patterns.cc
*** gcc-15-20251025/gcc/tree-vect-slp-patterns.cc	Sat Oct 25 22:32:55 2025
--- gcc-15-20251101/gcc/tree-vect-slp-patterns.cc	Sat Nov  1 22:34:15 2025
*************** compatible_complex_nodes_p (slp_compat_n
*** 847,861 ****
    return true;
  }
  
  static inline bool
  vect_validate_multiplication (slp_tree_to_load_perm_map_t *perm_cache,
  			      slp_compat_nodes_map_t *compat_cache,
! 			      vec<slp_tree> &left_op,
! 			      vec<slp_tree> &right_op,
! 			      bool subtract,
  			      enum _conj_status *_status)
  {
-   auto_vec<slp_tree> ops;
    enum _conj_status stats = CONJ_NONE;
  
    /* The complex operations can occur in two layouts and two permute sequences
--- 847,869 ----
    return true;
  }
  
+ 
+ /* Check to see if the oprands to two multiplies, 2 each in LEFT_OP and
+    RIGHT_OP match a complex multiplication  or complex multiply-and-accumulate
+    or complex multiply-and-subtract pattern.  Do this using the permute cache
+    PERM_CACHE and the combination compatibility list COMPAT_CACHE.  If
+    the operation is successful the macthing operands are returned in OPS and
+    _STATUS indicates if the operation matched includes a conjugate of one of the
+    operands.  If the operation succeeds True is returned, otherwise False and
+    the values in ops are meaningless.  */
  static inline bool
  vect_validate_multiplication (slp_tree_to_load_perm_map_t *perm_cache,
  			      slp_compat_nodes_map_t *compat_cache,
! 			      const vec<slp_tree> &left_op,
! 			      const vec<slp_tree> &right_op,
! 			      bool subtract, vec<slp_tree> &ops,
  			      enum _conj_status *_status)
  {
    enum _conj_status stats = CONJ_NONE;
  
    /* The complex operations can occur in two layouts and two permute sequences
*************** vect_validate_multiplication (slp_tree_t
*** 886,916 ****
    bool neg0 = vect_match_expression_p (right_op[0], NEGATE_EXPR);
    bool neg1 = vect_match_expression_p (right_op[1], NEGATE_EXPR);
  
    /* Determine which style we're looking at.  We only have different ones
       whenever a conjugate is involved.  */
    if (neg0 && neg1)
      ;
    else if (neg0)
      {
!       right_op[0] = SLP_TREE_CHILDREN (right_op[0])[0];
        stats = CONJ_FST;
        if (subtract)
  	perm = 0;
      }
    else if (neg1)
      {
!       right_op[1] = SLP_TREE_CHILDREN (right_op[1])[0];
        stats = CONJ_SND;
        perm = 1;
      }
  
    *_status = stats;
  
-   /* Flatten the inputs after we've remapped them.  */
-   ops.create (4);
-   ops.safe_splice (left_op);
-   ops.safe_splice (right_op);
- 
    /* Extract out the elements to check.  */
    slp_tree op0 = ops[styles[style][0]];
    slp_tree op1 = ops[styles[style][1]];
--- 894,924 ----
    bool neg0 = vect_match_expression_p (right_op[0], NEGATE_EXPR);
    bool neg1 = vect_match_expression_p (right_op[1], NEGATE_EXPR);
  
+   /* Create the combined inputs after remapping and flattening.  */
+   ops.create (4);
+   ops.safe_splice (left_op);
+   ops.safe_splice (right_op);
+ 
    /* Determine which style we're looking at.  We only have different ones
       whenever a conjugate is involved.  */
    if (neg0 && neg1)
      ;
    else if (neg0)
      {
!       ops[2] = SLP_TREE_CHILDREN (right_op[0])[0];
        stats = CONJ_FST;
        if (subtract)
  	perm = 0;
      }
    else if (neg1)
      {
!       ops[3] = SLP_TREE_CHILDREN (right_op[1])[0];
        stats = CONJ_SND;
        perm = 1;
      }
  
    *_status = stats;
  
    /* Extract out the elements to check.  */
    slp_tree op0 = ops[styles[style][0]];
    slp_tree op1 = ops[styles[style][1]];
*************** complex_mul_pattern::matches (complex_op
*** 1073,1087 ****
      return IFN_LAST;
  
    enum _conj_status status;
    if (!vect_validate_multiplication (perm_cache, compat_cache, left_op,
! 				     right_op, false, &status))
      {
        /* Try swapping the order and re-trying since multiplication is
  	 commutative.  */
        std::swap (left_op[0], left_op[1]);
        std::swap (right_op[0], right_op[1]);
        if (!vect_validate_multiplication (perm_cache, compat_cache, left_op,
! 					 right_op, false, &status))
  	return IFN_LAST;
      }
  
--- 1081,1096 ----
      return IFN_LAST;
  
    enum _conj_status status;
+   auto_vec<slp_tree> res_ops;
    if (!vect_validate_multiplication (perm_cache, compat_cache, left_op,
! 				     right_op, false, res_ops, &status))
      {
        /* Try swapping the order and re-trying since multiplication is
  	 commutative.  */
        std::swap (left_op[0], left_op[1]);
        std::swap (right_op[0], right_op[1]);
        if (!vect_validate_multiplication (perm_cache, compat_cache, left_op,
! 					 right_op, false, res_ops, &status))
  	return IFN_LAST;
      }
  
*************** complex_mul_pattern::matches (complex_op
*** 1109,1132 ****
    if (add0)
      ops->quick_push (add0);
  
!   complex_perm_kinds_t kind = linear_loads_p (perm_cache, left_op[0]);
    if (kind == PERM_EVENODD || kind == PERM_TOP)
      {
!       ops->quick_push (left_op[1]);
!       ops->quick_push (right_op[1]);
!       ops->quick_push (left_op[0]);
      }
    else if (kind == PERM_EVENEVEN && status != CONJ_SND)
      {
!       ops->quick_push (left_op[0]);
!       ops->quick_push (right_op[0]);
!       ops->quick_push (left_op[1]);
      }
    else
      {
!       ops->quick_push (left_op[0]);
!       ops->quick_push (right_op[1]);
!       ops->quick_push (left_op[1]);
      }
  
    return ifn;
--- 1118,1141 ----
    if (add0)
      ops->quick_push (add0);
  
!   complex_perm_kinds_t kind = linear_loads_p (perm_cache, res_ops[0]);
    if (kind == PERM_EVENODD || kind == PERM_TOP)
      {
!       ops->quick_push (res_ops[1]);
!       ops->quick_push (res_ops[3]);
!       ops->quick_push (res_ops[0]);
      }
    else if (kind == PERM_EVENEVEN && status != CONJ_SND)
      {
!       ops->quick_push (res_ops[0]);
!       ops->quick_push (res_ops[2]);
!       ops->quick_push (res_ops[1]);
      }
    else
      {
!       ops->quick_push (res_ops[0]);
!       ops->quick_push (res_ops[3]);
!       ops->quick_push (res_ops[1]);
      }
  
    return ifn;
*************** complex_fms_pattern::matches (complex_op
*** 1298,1312 ****
      return IFN_LAST;
  
    enum _conj_status status;
    if (!vect_validate_multiplication (perm_cache, compat_cache, right_op,
! 				     left_op, true, &status))
      {
        /* Try swapping the order and re-trying since multiplication is
  	 commutative.  */
        std::swap (left_op[0], left_op[1]);
        std::swap (right_op[0], right_op[1]);
        if (!vect_validate_multiplication (perm_cache, compat_cache, right_op,
! 					 left_op, true, &status))
  	return IFN_LAST;
      }
  
--- 1307,1323 ----
      return IFN_LAST;
  
    enum _conj_status status;
+   auto_vec<slp_tree> res_ops;
    if (!vect_validate_multiplication (perm_cache, compat_cache, right_op,
! 				     left_op, true, res_ops, &status))
      {
        /* Try swapping the order and re-trying since multiplication is
  	 commutative.  */
        std::swap (left_op[0], left_op[1]);
        std::swap (right_op[0], right_op[1]);
+       auto_vec<slp_tree> res_ops;
        if (!vect_validate_multiplication (perm_cache, compat_cache, right_op,
! 					 left_op, true, res_ops, &status))
  	return IFN_LAST;
      }
  
*************** complex_fms_pattern::matches (complex_op
*** 1321,1340 ****
    ops->truncate (0);
    ops->create (4);
  
!   complex_perm_kinds_t kind = linear_loads_p (perm_cache, right_op[0]);
    if (kind == PERM_EVENODD)
      {
        ops->quick_push (l0node[0]);
!       ops->quick_push (right_op[0]);
!       ops->quick_push (right_op[1]);
!       ops->quick_push (left_op[1]);
      }
    else
      {
        ops->quick_push (l0node[0]);
!       ops->quick_push (right_op[1]);
!       ops->quick_push (right_op[0]);
!       ops->quick_push (left_op[0]);
      }
  
    return ifn;
--- 1332,1351 ----
    ops->truncate (0);
    ops->create (4);
  
!   complex_perm_kinds_t kind = linear_loads_p (perm_cache, res_ops[2]);
    if (kind == PERM_EVENODD)
      {
        ops->quick_push (l0node[0]);
!       ops->quick_push (res_ops[2]);
!       ops->quick_push (res_ops[3]);
!       ops->quick_push (res_ops[1]);
      }
    else
      {
        ops->quick_push (l0node[0]);
!       ops->quick_push (res_ops[3]);
!       ops->quick_push (res_ops[2]);
!       ops->quick_push (res_ops[0]);
      }
  
    return ifn;
