diff -Nrcpad gcc-14-20251212/LAST_UPDATED gcc-14-20251219/LAST_UPDATED
*** gcc-14-20251212/LAST_UPDATED	Fri Dec 12 22:32:19 2025
--- gcc-14-20251219/LAST_UPDATED	Fri Dec 19 22:32:20 2025
***************
*** 1 ****
! Obtained from git: releases/gcc-14 revision 609a2511dc706800974e742fdd4fd0ae167e317d
--- 1 ----
! Obtained from git: releases/gcc-14 revision abb54c2cbb1daeb4261e9023d929cc559eb4b901
diff -Nrcpad gcc-14-20251212/MD5SUMS gcc-14-20251219/MD5SUMS
*** gcc-14-20251212/MD5SUMS	Fri Dec 12 22:32:24 2025
--- gcc-14-20251219/MD5SUMS	Fri Dec 19 22:32:24 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-14-20251212.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
--- 1,5 ----
  # This file contains the MD5 checksums of the files in the
! # gcc-14-20251219.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
*************** fc9280b02bc68e4fb1ef8d51ccc25061  Change
*** 23,29 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 02e08c1ef3cd68004bc1d509f419a499  LAST_UPDATED
  1671040823f8eb8436a06fdd18065e02  MAINTAINERS
  304c3887135aefa27c21292ec585b0a3  Makefile.def
  8dd93fbf2e32bcbd2faba10e3b8ba2b0  Makefile.in
--- 23,29 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! f26f688c8f3d04e5aec172ac659cbe0b  LAST_UPDATED
  1671040823f8eb8436a06fdd18065e02  MAINTAINERS
  304c3887135aefa27c21292ec585b0a3  Makefile.def
  8dd93fbf2e32bcbd2faba10e3b8ba2b0  Makefile.in
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 541,547 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! ec42241aa14bd600f770849ca9f54a7a  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
--- 541,547 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! b27cb5fe3f6485d6f805e4ab67ad9c61  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** ec6799501b2eb2923d5de6a66169dbd2  gcc/ON
*** 553,559 ****
  4ff8b6b00464fd6c37969f80145dca46  gcc/acinclude.m4
  496cb89e62ed3dbfd1af1db0975a4c04  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 3bab200500b14bdae016ab1e79f0e4b6  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
--- 553,559 ----
  4ff8b6b00464fd6c37969f80145dca46  gcc/acinclude.m4
  496cb89e62ed3dbfd1af1db0975a4c04  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 2aadd3caca03635929e0ec9bbb8f0039  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
*************** bb1ac51d891c2c88e66b325ec4ba37b6  gcc/ad
*** 728,734 ****
  c36c56653344092753d38d009f78b7d3  gcc/ada/exp_aggr.ads
  505062d76424b26ea35495f992e978ec  gcc/ada/exp_atag.adb
  f9d94a939aaa986fb1957454afcc5783  gcc/ada/exp_atag.ads
! ade95a70582e67a48e9a828b19fad287  gcc/ada/exp_attr.adb
  1f0d00e4f924cd79fcb70a729dcad92f  gcc/ada/exp_attr.ads
  33fd3e67f2d31ec03f6c604e5824bdfd  gcc/ada/exp_cg.adb
  ac19bd8c659aa1e17cfa0e35d7b09495  gcc/ada/exp_cg.ads
--- 728,734 ----
  c36c56653344092753d38d009f78b7d3  gcc/ada/exp_aggr.ads
  505062d76424b26ea35495f992e978ec  gcc/ada/exp_atag.adb
  f9d94a939aaa986fb1957454afcc5783  gcc/ada/exp_atag.ads
! e6b0e78a23cc304372059f922142c8a2  gcc/ada/exp_attr.adb
  1f0d00e4f924cd79fcb70a729dcad92f  gcc/ada/exp_attr.ads
  33fd3e67f2d31ec03f6c604e5824bdfd  gcc/ada/exp_cg.adb
  ac19bd8c659aa1e17cfa0e35d7b09495  gcc/ada/exp_cg.ads
*************** f61a98e52a715a073f777f982f1394b7  gcc/ad
*** 825,831 ****
  c04f30ccd26df7b20a118015913dc8d1  gcc/ada/gcc-interface/system.ads
  8abd80bc601182d50d4f835dcfb9350c  gcc/ada/gcc-interface/targtyps.cc
  9e3e5deb5e0b5742538534e1e5fbc6c6  gcc/ada/gcc-interface/trans.cc
! afc89bcf5977d8ddc4aedf635d18a82d  gcc/ada/gcc-interface/utils.cc
  24d282dce1b4ea4028f6526a978c21a0  gcc/ada/gcc-interface/utils2.cc
  436eced51949ed1ca279a6a8745fdc85  gcc/ada/gen_il-fields.ads
  fa8c0b5e369960e72685e36f3adce798  gcc/ada/gen_il-gen-gen_entities.adb
--- 825,831 ----
  c04f30ccd26df7b20a118015913dc8d1  gcc/ada/gcc-interface/system.ads
  8abd80bc601182d50d4f835dcfb9350c  gcc/ada/gcc-interface/targtyps.cc
  9e3e5deb5e0b5742538534e1e5fbc6c6  gcc/ada/gcc-interface/trans.cc
! 3c37d58b666e9d4297a6d457cc811d5d  gcc/ada/gcc-interface/utils.cc
  24d282dce1b4ea4028f6526a978c21a0  gcc/ada/gcc-interface/utils2.cc
  436eced51949ed1ca279a6a8745fdc85  gcc/ada/gen_il-fields.ads
  fa8c0b5e369960e72685e36f3adce798  gcc/ada/gen_il-gen-gen_entities.adb
*************** ca9033ff37a39734edcb55c478a3a1fa  gcc/dw
*** 5836,5842 ****
  40224310d2b6e68a058c4c1079917a1f  gcc/dwarf2cfi.cc
  163e5e9e8282834ce39f40a4696495a8  gcc/dwarf2ctf.cc
  be8084cbe55394042e43e039c8ed9452  gcc/dwarf2ctf.h
! 312c32d82cc1de564d5c2ea1a759c512  gcc/dwarf2out.cc
  15ac2573846d37a9fc761ca237cfcbb3  gcc/dwarf2out.h
  949b4f69bfb006cfb1da508bd737e550  gcc/early-remat.cc
  764b36482faefc5dac455631acf458cb  gcc/edit-context.cc
--- 5836,5842 ----
  40224310d2b6e68a058c4c1079917a1f  gcc/dwarf2cfi.cc
  163e5e9e8282834ce39f40a4696495a8  gcc/dwarf2ctf.cc
  be8084cbe55394042e43e039c8ed9452  gcc/dwarf2ctf.h
! 6baedc413c21b5138898576c08aaff8e  gcc/dwarf2out.cc
  15ac2573846d37a9fc761ca237cfcbb3  gcc/dwarf2out.h
  949b4f69bfb006cfb1da508bd737e550  gcc/early-remat.cc
  764b36482faefc5dac455631acf458cb  gcc/edit-context.cc
*************** ae6ba434f4ad2448c0f14d06f020a8e8  gcc/m2
*** 7414,7420 ****
  159038cfb96e584e4f21d13d650923f9  gcc/m2/tools-src/mklink.c
  d6aac0f23493e0ce7e6705ac01477a07  gcc/m2/tools-src/tidydates.py
  f9608e9005487c369e6c38949ab36fa1  gcc/m2/version.c
! ff057624034b9a3f61aa8a7949da456e  gcc/machmode.def
  d24a84209a835c9cd933ec6c0cd756a2  gcc/machmode.h
  db4aa18553273d5e513c430bdea3d79a  gcc/main.cc
  a209940893eb5d9d9edc9f1e0fa3a88d  gcc/make-unique.h
--- 7414,7420 ----
  159038cfb96e584e4f21d13d650923f9  gcc/m2/tools-src/mklink.c
  d6aac0f23493e0ce7e6705ac01477a07  gcc/m2/tools-src/tidydates.py
  f9608e9005487c369e6c38949ab36fa1  gcc/m2/version.c
! 5a710e63ee8c394af38ccb8f7b3a65f9  gcc/machmode.def
  d24a84209a835c9cd933ec6c0cd756a2  gcc/machmode.h
  db4aa18553273d5e513c430bdea3d79a  gcc/main.cc
  a209940893eb5d9d9edc9f1e0fa3a88d  gcc/make-unique.h
*************** e8a9eb01b9451a357155e7152df1c669  gcc/ta
*** 8061,8067 ****
  a05663c52c607143c607d3ecf1391979  gcc/targhooks.cc
  51d240e574a3f9ecec346d64a04ac634  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! c7bec6d7c5fab42f57ca487278fad460  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
--- 8061,8067 ----
  a05663c52c607143c607d3ecf1391979  gcc/targhooks.cc
  51d240e574a3f9ecec346d64a04ac634  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 294a66aaf195e193ab0ddd3210cc4620  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
*************** cbb30a4d3c73f183db77e6da8a13e3a9  gcc/te
*** 34831,34836 ****
--- 34831,34839 ----
  f7378d596bb7308498db40ad34fd8dab  gcc/testsuite/g++.target/aarch64/bitfield-abi-warning.h
  64610704e2fb7b814ffc84b6b28714a0  gcc/testsuite/g++.target/aarch64/complex-init.C
  c11e5f97e7a5971cc5c5017024f54496  gcc/testsuite/g++.target/aarch64/diag_aka_1.C
+ 5c7d9c457935aed97ec5411da8248b77  gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C
+ a374ccd68e050f2f5a99a70ed6099adf  gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C
+ 6ae7e639f92550ad23b9ec3fe950fa14  gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C
  4320de0414b96b162e7734443992dd38  gcc/testsuite/g++.target/aarch64/interference.C
  1523e6ba24b79e403ea7663afe5c1dfa  gcc/testsuite/g++.target/aarch64/mv-1.C
  48d1f2ca95056b77c6d78e74ad9b692f  gcc/testsuite/g++.target/aarch64/mv-pragma.C
*************** cdabe3aee66dacd2306a52f295e6ad65  gcc/te
*** 35008,35013 ****
--- 35011,35017 ----
  f3ce91773bd0b4a3127c481ccd50f20e  gcc/testsuite/g++.target/aarch64/sve/dup_sel_4.C
  88995b2addb79f14a72ba650d83a3920  gcc/testsuite/g++.target/aarch64/sve/dup_sel_5.C
  9e6f261244b524db00958d47111eef62  gcc/testsuite/g++.target/aarch64/sve/dup_sel_6.C
+ ed268bb0c6479d4c5a1aa2efea8c023a  gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C
  57a0aa7896383cbb0273342d58a4a7b5  gcc/testsuite/g++.target/aarch64/sve/max_1.C
  ab6c5e333d0a740ae5ecff69966813a2  gcc/testsuite/g++.target/aarch64/sve/min_1.C
  6bb662ee32d75fad86cbbcc07aab9998  gcc/testsuite/g++.target/aarch64/sve/pr102252.C
*************** a95c8779f3b9cc5c91774eab2c3b9b8d  gcc/te
*** 57985,57990 ****
--- 57989,57997 ----
  41703958f685e80bf77bb344c18b67fc  gcc/testsuite/gcc.target/aarch64/declare-simd-2.c
  063fb3cb3ef8c03670a39beb490eee85  gcc/testsuite/gcc.target/aarch64/diag_aka_1.c
  99d13b07988399a087cb53856c728972  gcc/testsuite/gcc.target/aarch64/div-by-bitmask.c
+ 3488e2eafe407d3b6120c7194ed905bb  gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c
+ eb63180d3203534427d2f43f02dd0ad5  gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c
+ 44e0ea6a8b4b6be2787d845af653ac9a  gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c
  5a0fb82365f402f7b5e039bc723a3020  gcc/testsuite/gcc.target/aarch64/dwarf-cfa-reg.c
  a9ccf8cef71e90daa83ae00204fd983c  gcc/testsuite/gcc.target/aarch64/dwarf_reg_size_1.c
  5fdc01fccf89920c24ce6dadea7114d3  gcc/testsuite/gcc.target/aarch64/dwarf_reg_size_2.c
*************** b756b55bf45e469c93050878d9bef905  gcc/te
*** 62430,62435 ****
--- 62437,62443 ----
  79f15d195cc9087e1d6665345a3f5123  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_1.c
  7b29bcc5f4568a218b087ab7a6207177  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_2.c
  f75cd152d1ea63349f09ef48040ff809  gcc/testsuite/gcc.target/aarch64/sve/dup_lane_3.c
+ dc3237178be6599bbf6062f3731243ef  gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c
  f8aebeb8f0a738c291cd7acbf0c1cd2e  gcc/testsuite/gcc.target/aarch64/sve/ext_1.c
  5a6168e8f8698cd82ef986d8c867fcc0  gcc/testsuite/gcc.target/aarch64/sve/ext_2.c
  d0e1d8fee3d430dd78f1f6b60a9c0f79  gcc/testsuite/gcc.target/aarch64/sve/ext_3.c
*************** ed33690892e43011718347ecca58daff  gcc/te
*** 104654,104659 ****
--- 104662,104669 ----
  5f287af670c9bdcf463957cb04a9cd11  gcc/testsuite/gnat.dg/lto26_pkg2.ads
  d38a63c50972ebf0d60bc6959e5d130f  gcc/testsuite/gnat.dg/lto29.adb
  92924880135ec84fd65e4fecf6055807  gcc/testsuite/gnat.dg/lto29_pkg.ads
+ 0bb4f053befcf73a4d457f035ee97b6a  gcc/testsuite/gnat.dg/lto30.adb
+ 5889bf52461acb4efaa37c6ba94a8f31  gcc/testsuite/gnat.dg/lto30.ads
  2acb4cc31994f1569a3db6ac6613928d  gcc/testsuite/gnat.dg/lto4.adb
  9b38247c8e825c514f87e2965d931dad  gcc/testsuite/gnat.dg/lto4.ads
  959fb8bdf4cd1c34347ecfbab19ea60b  gcc/testsuite/gnat.dg/lto5.adb
*************** fde5d5ed0c271572ac7da0e31e22bc5c  gcc/te
*** 105192,105197 ****
--- 105202,105209 ----
  25b5534a4bc4502074ce6463c2f5e96b  gcc/testsuite/gnat.dg/rational_arithmetic.ads
  46cc8f530fa18a6afd30b9d241f7967e  gcc/testsuite/gnat.dg/recursive_call.adb
  0b27bcc5788ce003bc049b34d20d5c88  gcc/testsuite/gnat.dg/reduce2.adb
+ 5870b8cebdd6ce91693a485c5a6854d5  gcc/testsuite/gnat.dg/reduce4.adb
+ 001425eca43e1ece9e65dd7929459079  gcc/testsuite/gnat.dg/reduce5.adb
  50be8d98f4f9ac99d64926a10596a2df  gcc/testsuite/gnat.dg/ref_type.adb
  5457827e708b7bfc92ffe5610655a443  gcc/testsuite/gnat.dg/ref_type.ads
  222b5d10f23a2e8e8a5e4d41e86e66ed  gcc/testsuite/gnat.dg/regpat1.adb
diff -Nrcpad gcc-14-20251212/gcc/DATESTAMP gcc-14-20251219/gcc/DATESTAMP
*** gcc-14-20251212/gcc/DATESTAMP	Fri Dec 12 22:32:05 2025
--- gcc-14-20251219/gcc/DATESTAMP	Fri Dec 19 22:32:05 2025
***************
*** 1 ****
! 20251212
--- 1 ----
! 20251219
diff -Nrcpad gcc-14-20251212/gcc/ada/ChangeLog gcc-14-20251219/gcc/ada/ChangeLog
*** gcc-14-20251212/gcc/ada/ChangeLog	Fri Dec 12 22:32:05 2025
--- gcc-14-20251219/gcc/ada/ChangeLog	Fri Dec 19 22:32:05 2025
***************
*** 1,3 ****
--- 1,17 ----
+ 2025-12-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123138
+ 	* exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Reduce>:
+ 	Override a universal numeric type only if the prefix is not an
+ 	aggregate.
+ 
+ 2025-12-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123060
+ 	* gcc-interface/utils.cc (update_pointer_to): Synthesize a new
+ 	TYPE_CANONICAL for the old pointer type in the case where there
+ 	is no new pointer type.  Likewise for references.
+ 
  2025-10-20  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/107536
diff -Nrcpad gcc-14-20251212/gcc/ada/exp_attr.adb gcc-14-20251219/gcc/ada/exp_attr.adb
*** gcc-14-20251212/gcc/ada/exp_attr.adb	Fri Dec 12 22:32:06 2025
--- gcc-14-20251219/gcc/ada/exp_attr.adb	Fri Dec 19 22:32:05 2025
*************** package body Exp_Attr is
*** 6097,6110 ****
                    Accum_Typ := Etype (N);
                 end if;
  
!                --  Try to cope with wrong E1 when Etype (N) doesn't help
                 if Is_Universal_Numeric_Type (Accum_Typ) then
!                   if Is_Array_Type (Etype (Prefix (N))) then
                       Accum_Typ := Component_Type (Etype (Prefix (N)));
-                   else
-                      --  Further hackery can be added here when there is a
-                      --  demonstrated need.
-                      null;
                    end if;
                 end if;
  
--- 6097,6109 ----
                    Accum_Typ := Etype (N);
                 end if;
  
!                --  If Accum_Typ is a universal numeric type and the prefix
!                --  is not an aggregate, use its component type in order to
!                --  avoid resolution problems later on.
! 
                 if Is_Universal_Numeric_Type (Accum_Typ) then
!                   if Nkind (Prefix (N)) /= N_Aggregate then
                       Accum_Typ := Component_Type (Etype (Prefix (N)));
                    end if;
                 end if;
  
diff -Nrcpad gcc-14-20251212/gcc/ada/gcc-interface/utils.cc gcc-14-20251219/gcc/ada/gcc-interface/utils.cc
*** gcc-14-20251212/gcc/ada/gcc-interface/utils.cc	Fri Dec 12 22:32:06 2025
--- gcc-14-20251219/gcc/ada/gcc-interface/utils.cc	Fri Dec 19 22:32:05 2025
*************** update_pointer_to (tree old_type, tree n
*** 4453,4460 ****
  	    new_ptr = TYPE_NEXT_PTR_TO (new_ptr);
  	  TYPE_NEXT_PTR_TO (new_ptr) = ptr;
  	}
!       else
! 	TYPE_POINTER_TO (new_type) = ptr;
  
        /* Now adjust them.  */
        for (; ptr; ptr = TYPE_NEXT_PTR_TO (ptr))
--- 4453,4475 ----
  	    new_ptr = TYPE_NEXT_PTR_TO (new_ptr);
  	  TYPE_NEXT_PTR_TO (new_ptr) = ptr;
  	}
!       else if (ptr)
! 	{
! 	  TYPE_POINTER_TO (new_type) = ptr;
! 
! 	  /* If there is no pointer pointing to NEW_TYPE yet, re-compute the
! 	     TYPE_CANONICAL of the old pointer but pointing to NEW_TYPE, like
! 	     build_pointer_type would have done for such a pointer, because we
! 	     will propagate it in the adjustment loop below.  */
! 	  if (TYPE_STRUCTURAL_EQUALITY_P (new_type))
! 	    SET_TYPE_STRUCTURAL_EQUALITY (ptr);
! 	  else if (TYPE_CANONICAL (new_type) != new_type
! 		   || (TYPE_REF_CAN_ALIAS_ALL (ptr)
! 		       && !lookup_attribute ("may_alias",
! 					     TYPE_ATTRIBUTES (new_type))))
! 	    TYPE_CANONICAL (ptr)
! 	      = build_pointer_type (TYPE_CANONICAL (new_type));
! 	}
  
        /* Now adjust them.  */
        for (; ptr; ptr = TYPE_NEXT_PTR_TO (ptr))
*************** update_pointer_to (tree old_type, tree n
*** 4474,4481 ****
  	    new_ref = TYPE_NEXT_REF_TO (new_ref);
  	  TYPE_NEXT_REF_TO (new_ref) = ref;
  	}
!       else
! 	TYPE_REFERENCE_TO (new_type) = ref;
  
        /* Now adjust them.  */
        for (; ref; ref = TYPE_NEXT_REF_TO (ref))
--- 4489,4511 ----
  	    new_ref = TYPE_NEXT_REF_TO (new_ref);
  	  TYPE_NEXT_REF_TO (new_ref) = ref;
  	}
!       else if (ref)
! 	{
! 	  TYPE_REFERENCE_TO (new_type) = ref;
! 
! 	  /* If there is no reference pointing to NEW_TYPE yet, re-compute the
! 	     TYPE_CANONICAL of the old reference but pointing to NEW_TYPE, like
! 	     build_reference_type would have done for such a reference, because
! 	     we will propagate it in the adjustment loop below.  */
! 	  if (TYPE_STRUCTURAL_EQUALITY_P (new_type))
! 	    SET_TYPE_STRUCTURAL_EQUALITY (ref);
! 	  else if (TYPE_CANONICAL (new_type) != new_type
! 		   || (TYPE_REF_CAN_ALIAS_ALL (ref)
! 		       && !lookup_attribute ("may_alias",
! 					     TYPE_ATTRIBUTES (new_type))))
! 	    TYPE_CANONICAL (ref)
! 	      = build_reference_type (TYPE_CANONICAL (new_type));
! 	}
  
        /* Now adjust them.  */
        for (; ref; ref = TYPE_NEXT_REF_TO (ref))
diff -Nrcpad gcc-14-20251212/gcc/dwarf2out.cc gcc-14-20251219/gcc/dwarf2out.cc
*** gcc-14-20251212/gcc/dwarf2out.cc	Fri Dec 12 22:32:07 2025
--- gcc-14-20251219/gcc/dwarf2out.cc	Fri Dec 19 22:32:07 2025
*************** gen_array_type_die (tree type, dw_die_re
*** 22666,22671 ****
--- 22666,22693 ----
  		      && TYPE_REVERSE_STORAGE_ORDER (type),
  		      context_die);
  
+   /* Add bit stride information to boolean vectors of single bits so that
+      elements can be correctly read and displayed by a debugger.  */
+   if (VECTOR_BOOLEAN_TYPE_P (type))
+     {
+       enum machine_mode tmode = TYPE_MODE_RAW (type);
+       if (GET_MODE_CLASS (tmode) == MODE_VECTOR_BOOL)
+ 	{
+ 	  /* Calculate bit-size of element based on mnode.  */
+ 	  poly_uint16 bit_size = exact_div (GET_MODE_BITSIZE (tmode),
+ 					    GET_MODE_NUNITS (tmode));
+ 	  /* Set bit stride in the array type DIE.  */
+ 	  add_AT_unsigned (array_die, DW_AT_bit_stride, bit_size.coeffs[0]);
+ 	  /* Find DIE corresponding to the element type so that we could
+ 	     add DW_AT_bit_size to it.  */
+ 	  dw_die_ref elem_die = get_AT_ref (array_die, DW_AT_type);
+ 	  /* Avoid adding DW_AT_bit_size twice.  */
+ 	  if (get_AT (elem_die, DW_AT_bit_size) == NULL)
+ 	    add_AT_unsigned (elem_die, DW_AT_bit_size,
+ 			     TYPE_PRECISION (element_type));
+ 	}
+     }
+ 
    add_gnat_descriptive_type_attribute (array_die, type, context_die);
    if (TYPE_ARTIFICIAL (type))
      add_AT_flag (array_die, DW_AT_artificial, 1);
diff -Nrcpad gcc-14-20251212/gcc/machmode.def gcc-14-20251219/gcc/machmode.def
*** gcc-14-20251212/gcc/machmode.def	Fri Dec 12 22:32:07 2025
--- gcc-14-20251219/gcc/machmode.def	Fri Dec 19 22:32:07 2025
*************** along with GCC; see the file COPYING3.
*** 148,159 ****
  	mode, with smaller numbers indicating a higher priority.
  
       VECTOR_BOOL_MODE (NAME, COUNT, COMPONENT, BYTESIZE)
!         Create a vector mode called NAME that contains COUNT boolean
!         elements and occupies BYTESIZE bytes in total.  Each boolean
!         element is of COMPONENT type and occupies (COUNT * BITS_PER_UNIT) /
!         BYTESIZE bits, with the element at index 0 occupying the lsb of the
!         first byte in memory.  Only the lowest bit of each element is
!         significant.
  
       OPAQUE_MODE (NAME, BYTESIZE)
          Create an opaque mode called NAME that is BYTESIZE bytes wide.
--- 148,159 ----
  	mode, with smaller numbers indicating a higher priority.
  
       VECTOR_BOOL_MODE (NAME, COUNT, COMPONENT, BYTESIZE)
! 	Create a vector mode called NAME that contains COUNT boolean
! 	elements and occupies BYTESIZE bytes in total.  Each boolean
! 	element is of COMPONENT type and occupies ((BYTESIZE * BITS_PER_UNIT)
! 	/ COUNT) bits, with the element at index 0 occupying the lsb of the
! 	first byte in memory.  Only the lowest bit of each element is
! 	significant.
  
       OPAQUE_MODE (NAME, BYTESIZE)
          Create an opaque mode called NAME that is BYTESIZE bytes wide.
diff -Nrcpad gcc-14-20251212/gcc/testsuite/ChangeLog gcc-14-20251219/gcc/testsuite/ChangeLog
*** gcc-14-20251212/gcc/testsuite/ChangeLog	Fri Dec 12 22:32:08 2025
--- gcc-14-20251219/gcc/testsuite/ChangeLog	Fri Dec 19 22:32:07 2025
***************
*** 1,3 ****
--- 1,12 ----
+ 2025-12-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/reduce4.adb: New test.
+ 	* gnat.dg/reduce5.adb: Likewise.
+ 
+ 2025-12-15  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/lto30.ads, gnat.dg/lto30.adb: New test.
+ 
  2025-11-28  Avinash Jayakar  <avinashd@linux.ibm.com>
  
  	PR tree-optimization/122126
diff -Nrcpad gcc-14-20251212/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C gcc-14-20251219/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C
*** gcc-14-20251212/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-func.C	Fri Dec 19 22:32:09 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ [[gnu::target ("arch=armv9-a+sve")]]
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14-20251212/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C gcc-14-20251219/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C
*** gcc-14-20251212/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma-sme.C	Fri Dec 19 22:32:09 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"svcount_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sme.h>
+ 
+ #pragma GCC target "+sve2+sme2"
+ 
+ void fun ()
+ {
+   volatile svbool_t pred;
+   volatile svcount_t count;
+ }
diff -Nrcpad gcc-14-20251212/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C gcc-14-20251219/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C
*** gcc-14-20251212/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/g++.target/aarch64/dwarf-bit-stride-pragma.C	Fri Dec 19 22:32:09 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ #pragma GCC target "+sve"
+ 
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14-20251212/gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C gcc-14-20251219/gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C
*** gcc-14-20251212/gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/g++.target/aarch64/sve/dwarf-bit-stride.C	Fri Dec 19 22:32:09 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"svbool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14-20251212/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c gcc-14-20251219/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c
*** gcc-14-20251212/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c	Fri Dec 19 22:32:11 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ __attribute__((target("arch=armv9-a+sve")))
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14-20251212/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c gcc-14-20251219/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c
*** gcc-14-20251212/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c	Fri Dec 19 22:32:11 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 2 } }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"__SVCount_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 2 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #pragma GCC target "+sve2+sme2"
+ 
+ void fun ()
+ {
+   volatile __SVBool_t pred;
+   volatile __SVCount_t count;
+ }
diff -Nrcpad gcc-14-20251212/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c gcc-14-20251219/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c
*** gcc-14-20251212/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma.c	Fri Dec 19 22:32:11 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ #pragma GCC target "+sve"
+ 
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14-20251212/gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c gcc-14-20251219/gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c
*** gcc-14-20251212/gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/gcc.target/aarch64/sve/dwarf-bit-stride.c	Fri Dec 19 22:32:12 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ // { dg-options "-g -dA" }
+ // { dg-final { scan-assembler-times "DW_AT_name: \"__SVBool_t\"" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_stride" 1 } }
+ // { dg-final { scan-assembler-times ".byte	0x1	// DW_AT_bit_size" 1 } }
+ 
+ #include <arm_sve.h>
+ 
+ void fun ()
+ {
+   volatile svbool_t pred8 = svwhilelt_b8_u32 (0u, 1u);
+   volatile svbool_t pred16 = svwhilelt_b16_u32 (0u, 3u);
+   volatile svbool_t pred32 = svwhilelt_b32_u32 (0u, 7u);
+   volatile svbool_t pred64 = svwhilelt_b64_u32 (0u, 11u);
+ }
diff -Nrcpad gcc-14-20251212/gcc/testsuite/gnat.dg/lto30.adb gcc-14-20251219/gcc/testsuite/gnat.dg/lto30.adb
*** gcc-14-20251212/gcc/testsuite/gnat.dg/lto30.adb	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/gnat.dg/lto30.adb	Fri Dec 19 22:32:14 2025
***************
*** 0 ****
--- 1,31 ----
+ -- { dg-do compile }
+ -- { dg-options "-flto" { target lto } }
+ 
+ with Ada.Unchecked_Conversion;
+ with System;
+ 
+ package body Lto30 is
+ 
+    generic
+       type T is private;
+    package Unbounded_Arrays is
+       type Unbounded_Array is array (Natural range 1 .. Natural'Last) of T;
+       type Unbounded_Array_Access is access Unbounded_Array;
+       function Convert is new
+          Ada.Unchecked_Conversion (System.Address, Unbounded_Array_Access);
+    end Unbounded_Arrays;
+ 
+    package Atom_Arrays is new Unbounded_Arrays (Ptr);
+    use Atom_Arrays;
+ 
+    procedure Proc is
+       procedure Foo (Targets : access Unbounded_Array_Access);
+       pragma Import (Ada, Foo, "Foo");
+ 
+       Output : aliased Unbounded_Array_Access;
+ 
+    begin
+       Foo (Output'Unchecked_Access);
+    end;
+ 
+ end Lto30;
diff -Nrcpad gcc-14-20251212/gcc/testsuite/gnat.dg/lto30.ads gcc-14-20251219/gcc/testsuite/gnat.dg/lto30.ads
*** gcc-14-20251212/gcc/testsuite/gnat.dg/lto30.ads	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/gnat.dg/lto30.ads	Fri Dec 19 22:32:14 2025
***************
*** 0 ****
--- 1,13 ----
+ package Lto30 is
+ 
+    type Rec is private;
+ 
+    type Ptr is access all Rec;
+ 
+    procedure Proc;
+ 
+ private
+ 
+    type Rec is null record;
+ 
+ end Lto30;
diff -Nrcpad gcc-14-20251212/gcc/testsuite/gnat.dg/reduce4.adb gcc-14-20251219/gcc/testsuite/gnat.dg/reduce4.adb
*** gcc-14-20251212/gcc/testsuite/gnat.dg/reduce4.adb	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/gnat.dg/reduce4.adb	Fri Dec 19 22:32:14 2025
***************
*** 0 ****
--- 1,9 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ procedure Reduce4 (S : String) is
+ begin
+   if [for E of S => 1]'Reduce ("+", 0) = 3 then
+     null;
+   end if;
+ end;
diff -Nrcpad gcc-14-20251212/gcc/testsuite/gnat.dg/reduce5.adb gcc-14-20251219/gcc/testsuite/gnat.dg/reduce5.adb
*** gcc-14-20251212/gcc/testsuite/gnat.dg/reduce5.adb	Thu Jan  1 00:00:00 1970
--- gcc-14-20251219/gcc/testsuite/gnat.dg/reduce5.adb	Fri Dec 19 22:32:14 2025
***************
*** 0 ****
--- 1,36 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ with Ada.Text_IO; use Ada.Text_IO;
+ 
+ procedure Reduce5 is
+    subtype Chunk_Number is Natural range 1 .. 8;
+    Grid  : array (1 .. 80, 1 .. 100) of Boolean := (others => (others => False));
+    Partial_Sum, Partial_Max : array (Chunk_Number) of Natural := (others => 0);
+    Partial_Min              : array (Chunk_Number) of Natural := (others => Natural'Last);
+ 
+ begin
+    for I in Grid'Range (1) loop
+       Grid (I, 1) := (for all J in Grid'Range (2) => Grid (I, J) = True);
+    end loop;
+ 
+    for I in Grid'Range (1) loop
+       declare
+          True_Count : constant Natural :=
+            [for J in Grid'Range(2) => (if Grid (I, J) then 1 else 0)]'Reduce("+",0);
+       begin
+          Partial_Sum (I) := @ + True_Count;
+          Partial_Min (I) := Natural'Min (@, True_Count);
+          Partial_Max (I) := Natural'Max (@, True_Count);
+       end;
+    end loop;
+ 
+   Put_Line ("Total=" & Natural'Image (Partial_Sum'Reduce ("+", 0)) &
+             ", Min=" & Natural'Image (Partial_Min'Reduce(Natural'Min, Natural'Last)) &
+             ", Max=" & Natural'Image (Partial_Max'Reduce(Natural'Max, 0)));
+ 
+   Put_Line ("Total=" & Partial_Sum'Reduce ("+", 0)'Image &
+             ", Min=" & Partial_Min'Reduce(Natural'Min, Natural'Last)'Image &
+             ", Max=" & Partial_Max'Reduce(Natural'Max, 0)'Image);
+ 
+ end;
