Subject: bug#79139: cp --reflink truncates sparse files on ZFS

From: Paul Eggert <[email-masked]>
Date: Sat, 2 Aug 2025 10:30:56 -0700

On 2025-08-02 09:47, Sam James wrote:
> You can shorten sourceware (and gcc) bug URLs to:
> https://sourceware.org/PR123456
> https://gcc.gnu.org/PR123456

Thanks, I didn't know that. These URL shorthands are well supported so 
let's use them in the code and doc, as that's a readability win. I 
installed the attached patches to do that. I didn't alter ChangeLog 
partly due to laziness, partly as it's less important there.

From 9870493709c4d47e64f01502cc6bfdfa3f219a2e Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email-masked]>
Date: Sat, 2 Aug 2025 10:21:36 -0700
Subject: [PATCH 1/2] Shorten glibc bug URLs

---
 config/srclist.txt                            | 14 +++++-----
 doc/glibc-functions/backtrace_symbols_fd.texi |  2 +-
 doc/glibc-functions/copy_file_range.texi      |  3 +-
 doc/glibc-functions/initstate_r.texi          |  2 +-
 doc/glibc-functions/renameat2.texi            |  2 +-
 doc/glibc-functions/strerrorname_np.texi      |  6 ++--
 doc/posix-functions/aligned_alloc.texi        |  2 +-
 doc/posix-functions/faccessat.texi            |  2 +-
 doc/posix-functions/fegetenv.texi             |  2 +-
 doc/posix-functions/fesetexcept.texi          |  4 +--
 doc/posix-functions/fesetexceptflag.texi      |  6 ++--
 doc/posix-functions/feupdateenv.texi          |  4 +--
 doc/posix-functions/fnmatch.texi              |  4 +--
 doc/posix-functions/futimens.texi             |  2 +-
 doc/posix-functions/getpayload.texi           |  2 +-
 doc/posix-functions/getpayloadf.texi          |  2 +-
 doc/posix-functions/getpayloadl.texi          |  2 +-
 doc/posix-functions/initstate.texi            |  2 +-
 doc/posix-functions/linkat.texi               |  2 +-
 doc/posix-functions/longjmp.texi              |  2 +-
 doc/posix-functions/mbrlen.texi               |  4 +--
 doc/posix-functions/mbrtoc16.texi             |  8 +++---
 doc/posix-functions/mbrtoc32.texi             |  8 +++---
 doc/posix-functions/mbrtowc.texi              | 10 +++----
 doc/posix-functions/mbsnrtowcs.texi           |  4 +--
 doc/posix-functions/mbsrtowcs.texi            |  4 +--
 doc/posix-functions/mbstowcs.texi             |  4 +--
 doc/posix-functions/mbtowc.texi               |  6 ++--
 doc/posix-functions/posix_memalign.texi       |  2 +-
 doc/posix-functions/swprintf.texi             |  2 +-
 doc/posix-functions/time.texi                 |  2 +-
 doc/posix-functions/totalorder.texi           |  2 +-
 doc/posix-functions/totalorderf.texi          |  2 +-
 doc/posix-functions/totalorderl.texi          |  2 +-
 doc/posix-functions/utimensat.texi            |  2 +-
 doc/posix-functions/wcscmp.texi               |  2 +-
 doc/posix-headers/stdlib.texi                 |  2 +-
 doc/posix-headers/sys_un.texi                 |  2 +-
 doc/regex.texi                                | 10 +++----
 lib/af_alg.c                                  |  2 +-
 lib/copy-file-range.c                         |  2 +-
 lib/duplocale.c                               |  2 +-
 lib/fchmodat.c                                |  2 +-
 lib/fpe-trapping.h                            |  2 +-
 lib/freading.c                                |  2 +-
 lib/gen-uni-tables.c                          |  4 +--
 lib/getlocalename_l-unsafe.c                  |  2 +-
 lib/glthread/lock.c                           |  2 +-
 lib/glthread/lock.h                           |  2 +-
 lib/lchmod.c                                  |  2 +-
 lib/mbtowc-lock.h                             |  2 +-
 lib/md5-stream.c                              |  2 +-
 lib/nproc.c                                   |  2 +-
 lib/sched.in.h                                |  2 +-
 lib/sha1-stream.c                             |  2 +-
 lib/sha256-stream.c                           |  2 +-
 lib/sha512-stream.c                           |  2 +-
 lib/stdio.in.h                                |  2 +-
 lib/strfmon_l.c                               |  2 +-
 lib/uniwidth/width.c                          |  4 +--
 lib/vasnprintf.c                              |  6 ++--
 m4/duplocale.m4                               |  2 +-
 m4/fenv-environment.m4                        |  6 ++--
 m4/fnmatch.m4                                 | 10 +++----
 m4/free.m4                                    |  4 +--
 m4/getpayload.m4                              |  6 ++--
 m4/mbrtowc.m4                                 |  2 +-
 m4/memchr.m4                                  |  2 +-
 m4/memmem.m4                                  |  2 +-
 m4/printf.m4                                  |  2 +-
 m4/pthread_rwlock_rdlock.m4                   |  2 +-
 m4/strcasestr.m4                              |  4 +--
 m4/strerrorname_np.m4                         |  6 ++--
 m4/strfmon_l.m4                               |  2 +-
 m4/strstr.m4                                  |  4 +--
 m4/strtok_r.m4                                |  2 +-
 m4/time.m4                                    |  2 +-
 m4/wchar_h.m4                                 |  2 +-
 tests/test-execute-script.c                   |  2 +-
 tests/test-exp2.h                             |  2 +-
 tests/test-fnmatch.c                          |  4 +--
 tests/test-getaddrinfo.c                      |  2 +-
 tests/test-getopt.h                           |  2 +-
 tests/test-getopt_long.h                      |  2 +-
 tests/test-gettimeofday.c                     |  2 +-
 tests/test-mbrtoc32-regular.c                 |  2 +-
 tests/test-perror2.c                          |  2 +-
 tests/test-posix_spawn-script.c               |  2 +-
 tests/test-posix_spawnp-script.c              |  2 +-
 tests/test-random_r.c                         |  2 +-
 tests/test-realloc-posix.c                    |  2 +-
 tests/test-sigsegv-catch-stackoverflow1.c     |  2 +-
 tests/test-sigsegv-catch-stackoverflow2.c     |  2 +-
 tests/test-snprintf-posix.h                   |  2 +-
 tests/test-spawn-pipe-script.c                |  2 +-
 tests/test-sprintf-posix.h                    |  2 +-
 tests/test-strfmon_l.c                        |  2 +-
 tests/test-strtod.h                           |  2 +-
 tests/test-strtof.h                           |  2 +-
 tests/test-strtold.h                          |  2 +-
 tests/test-timespec_get.c                     |  2 +-
 tests/test-vasnprintf-posix.c                 |  2 +-
 tests/test-vasnprintf-posix2.c                | 28 +++++++++----------
 tests/test-vasnwprintf-posix.c                |  2 +-
 tests/test-vasnwprintf-posix2.c               |  4 +--
 tests/test-vasprintf-posix.c                  |  2 +-
 tests/test-xstrtod.c                          |  2 +-
 tests/test-xstrtold.c                         |  2 +-
 108 files changed, 173 insertions(+), 174 deletions(-)

diff --git a/config/srclist.txt b/config/srclist.txt
index 13d16a246b..cd68f38c5d 100644
--- a/config/srclist.txt
+++ b/config/srclist.txt
@@ -116,7 +116,7 @@ $LIBCSRC stdlib/tst-stdc_trailing_zeros.c	tests/from-glibc
 #$LIBCSRC posix/getopt1.c		lib gpl
 #$LIBCSRC posix/getopt_int.h		lib gpl
 #
-# https://sourceware.org/bugzilla/show_bug.cgi?id=1293
+# https://sourceware.org/PR1293
 #$LIBCSRC libidn/iconvme.h		lib gpl
 #$LIBCSRC libidn/iconvme.c		lib gpl
 
@@ -127,7 +127,7 @@ $LIBCSRC stdlib/tst-stdc_trailing_zeros.c	tests/from-glibc
 # (gnulib needs config.h?) $LIBCSRC/string/memmem.c		lib gpl
 
 #
-# https://sourceware.org/bugzilla/show_bug.cgi?id=1439
+# https://sourceware.org/PR1439
 #$LIBCSRC crypt/md5.c			lib gpl
 #$LIBCSRC crypt/md5.h			lib gpl
 # These are close, but ...
@@ -137,10 +137,10 @@ $LIBCSRC stdlib/tst-stdc_trailing_zeros.c	tests/from-glibc
 #$LIBCSRC login/forkpty.c		lib gpl
 #$LIBCSRC login/programs/pt_chown.c	lib gpl
 #
-# https://sourceware.org/bugzilla/show_bug.cgi?id=321
+# https://sourceware.org/PR321
 #$LIBCSRC malloc/obstack.c		lib gpl
 #
-# https://sourceware.org/bugzilla/show_bug.cgi?id=321
+# https://sourceware.org/PR321
 #$LIBCSRC malloc/obstack.h		lib gpl
 #$LIBCSRC misc/error.c			lib gpl
 #$LIBCSRC misc/error.h			lib/error.in.h gpl
@@ -150,11 +150,11 @@ $LIBCSRC stdlib/tst-stdc_trailing_zeros.c	tests/from-glibc
 #$LIBCSRC posix/fnmatch.h		lib/fnmatch.in.h gpl
 #$LIBCSRC posix/fnmatch_loop.c		lib gpl
 #
-# https://sourceware.org/bugzilla/show_bug.cgi?id=1060
-# https://sourceware.org/bugzilla/show_bug.cgi?id=1062
+# https://sourceware.org/PR1060
+# https://sourceware.org/PR1062
 #$LIBCSRC posix/glob.c			lib gpl
 #
-# https://sourceware.org/bugzilla/show_bug.cgi?id=1060
+# https://sourceware.org/PR1060
 #$LIBCSRC posix/glob.h			lib/glob-libc.h gpl
 #
 #$LIBCSRC stdlib/putenv.c		lib gpl
diff --git a/doc/glibc-functions/backtrace_symbols_fd.texi b/doc/glibc-functions/backtrace_symbols_fd.texi
index 86cb71d272..b57d7a47f0 100644
--- a/doc/glibc-functions/backtrace_symbols_fd.texi
+++ b/doc/glibc-functions/backtrace_symbols_fd.texi
@@ -35,7 +35,7 @@ FreeBSD, NetBSD, OpenBSD.
 @item
 The strings printed by this function not the same as the strings returned by
 @code{backtrace_symbols} on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=31730
+@c https://sourceware.org/PR31730
 glibc 2.39.
 @item
 On platforms where the function is missing,
diff --git a/doc/glibc-functions/copy_file_range.texi b/doc/glibc-functions/copy_file_range.texi
index 80469d0994..36805321a7 100644
--- a/doc/glibc-functions/copy_file_range.texi
+++ b/doc/glibc-functions/copy_file_range.texi
@@ -36,8 +36,7 @@ error @code{ENOSYS}.
 @item
 This function returns an incorrect value when the number of bytes copied
 exceeds @code{INT_MAX} on systems using glibc version 2.41 or 2.42.
-See @url{glibc bug 33245,
-https://sourceware.org/bugzilla/show_bug.cgi?id=33245}.
+See @url{glibc bug 33245, https://sourceware.org/PR33245}.
 
 @item
 This function is provided on GNU/Hurd but it is only a stub: It always
diff --git a/doc/glibc-functions/initstate_r.texi b/doc/glibc-functions/initstate_r.texi
index 8a4fbfa687..a135ee0679 100644
--- a/doc/glibc-functions/initstate_r.texi
+++ b/doc/glibc-functions/initstate_r.texi
@@ -34,7 +34,7 @@ Portability problems not fixed by Gnulib:
 @itemize
 @item
 This function crashes if the state buffer is unaligned on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30584
+@c https://sourceware.org/PR30584
 glibc 2.36/sparc.
 @item
 This function has a slightly different (but compatible) declaration on some
diff --git a/doc/glibc-functions/renameat2.texi b/doc/glibc-functions/renameat2.texi
index 89d8d892ff..7d3240bcc6 100644
--- a/doc/glibc-functions/renameat2.texi
+++ b/doc/glibc-functions/renameat2.texi
@@ -23,7 +23,7 @@ Cygwin 3.4.6.
 @code{renameat2 (AT_FDCWD, "file", AT_FDCWD, "new/" ...)} succeeds
 instead of failing and setting @code{errno} to @code{ENOTDIR}, on some
 platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=32570
+@c https://sourceware.org/PR32570
 GNU/Hurd with glibc 2.41.
 @end itemize
 
diff --git a/doc/glibc-functions/strerrorname_np.texi b/doc/glibc-functions/strerrorname_np.texi
index aacfaf12b2..005e1c7f74 100644
--- a/doc/glibc-functions/strerrorname_np.texi
+++ b/doc/glibc-functions/strerrorname_np.texi
@@ -20,9 +20,9 @@ This function is missing on many platforms:
 glibc 2.31, macOS 14, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android API level 34.
 @item
 This function returns wrong values on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=26555
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=29545
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=31080
+@c https://sourceware.org/PR26555
+@c https://sourceware.org/PR29545
+@c https://sourceware.org/PR31080
 @c https://www.illumos.org/issues/17134
 glibc 2.37, Solaris 11 OmniOS.
 @end itemize
diff --git a/doc/posix-functions/aligned_alloc.texi b/doc/posix-functions/aligned_alloc.texi
index 04631fe486..a8205d9912 100644
--- a/doc/posix-functions/aligned_alloc.texi
+++ b/doc/posix-functions/aligned_alloc.texi
@@ -41,7 +41,7 @@ glibc 2.15, macOS 10.14, FreeBSD 6.4, NetBSD 7.1, OpenBSD 6.0, Minix 3.1.8, AIX
 
 @item
 If the alignment and size are absurdly large, this function crashes:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=32301
+@c https://sourceware.org/PR32301
 glibc 2.41.
 @end itemize
 
diff --git a/doc/posix-functions/faccessat.texi b/doc/posix-functions/faccessat.texi
index 0179e4bfff..072601c684 100644
--- a/doc/posix-functions/faccessat.texi
+++ b/doc/posix-functions/faccessat.texi
@@ -32,7 +32,7 @@ which is supported by GNU @code{faccessat}.
 @item
 On some platforms, @code{faccessat} can mishandle @code{AT_EACCESS}
 after a process starts as root and then becomes non-root:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=18683
+@c https://sourceware.org/PR18683
 GNU/Linux with glibc 2.32.
 @end itemize
 
diff --git a/doc/posix-functions/fegetenv.texi b/doc/posix-functions/fegetenv.texi
index 57669502f4..3cd77fa6b1 100644
--- a/doc/posix-functions/fegetenv.texi
+++ b/doc/posix-functions/fegetenv.texi
@@ -14,7 +14,7 @@ This function is missing on some platforms:
 FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4.
 @item
 This function clears all exception trap bits on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=16198
+@c https://sourceware.org/PR16198
 glibc 2.19/x86_64,
 Mac OS X 10.5/i386, Mac OS X 10.5/x86_64.
 @item
diff --git a/doc/posix-functions/fesetexcept.texi b/doc/posix-functions/fesetexcept.texi
index 915fa42c55..d96d4cc0b2 100644
--- a/doc/posix-functions/fesetexcept.texi
+++ b/doc/posix-functions/fesetexcept.texi
@@ -20,9 +20,9 @@ This function is missing on all non-glibc platforms:
 glibc 2.24, macOS 14, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0.
 @item
 This function triggers floating-point exception traps although it shouldn't, on
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30989
+@c https://sourceware.org/PR30989
 glibc 2.37/i386,
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30988
+@c https://sourceware.org/PR30988
 glibc 2.37/powerpc.
 @end itemize
 
diff --git a/doc/posix-functions/fesetexceptflag.texi b/doc/posix-functions/fesetexceptflag.texi
index c5e6b0d343..3a9d0b7b54 100644
--- a/doc/posix-functions/fesetexceptflag.texi
+++ b/doc/posix-functions/fesetexceptflag.texi
@@ -14,14 +14,14 @@ This function is missing on some platforms:
 FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Android 4.4.
 @item
 This function triggers floating-point exception traps although it shouldn't, on
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30990
+@c https://sourceware.org/PR30990
 glibc 2.37/i386, glibc 2.37/x86_64,
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30988
+@c https://sourceware.org/PR30988
 glibc 2.37/powerpc,
 musl libc, Mac OS X 10.5, Minix 3.3, mingw, Haiku.
 @item
 This function clears too many floating-point exception flags on
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30998
+@c https://sourceware.org/PR30998
 glibc 2.37/alpha.
 @item
 This function loses the @code{FE_INVALID} flag on
diff --git a/doc/posix-functions/feupdateenv.texi b/doc/posix-functions/feupdateenv.texi
index 5f9ae3a09f..d24c06484f 100644
--- a/doc/posix-functions/feupdateenv.texi
+++ b/doc/posix-functions/feupdateenv.texi
@@ -15,7 +15,7 @@ FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Solaris 9, Cygwin
 @item
 This function crashes when given the argument @code{FE_DFL_ENV}
 on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=31022
+@c https://sourceware.org/PR31022
 glibc 2.37/riscv64.
 @item
 This function does not work on some platforms:
@@ -35,7 +35,7 @@ on some platforms:
 musl libc/i386, musl libc/x86_64, AIX 7.3, Solaris 10 and 11, mingw 10.
 @item
 This function does not trigger traps on
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=31023
+@c https://sourceware.org/PR31023
 glibc 2.37/hppa,
 musl libc/s390x,
 @c src/sys/arch/powerpc/include/fenv.h src/lib/libm/arch/powerpc/fenv.c
diff --git a/doc/posix-functions/fnmatch.texi b/doc/posix-functions/fnmatch.texi
index 12143902a3..9574fc977a 100644
--- a/doc/posix-functions/fnmatch.texi
+++ b/doc/posix-functions/fnmatch.texi
@@ -115,12 +115,12 @@ on some platforms:
 Solaris 11.4.
 @item
 Ranges that start or end with a backslash don't work right on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=361
+@c https://sourceware.org/PR361
 glibc 2.3.3.
 @item
 In the pattern, an opening bracket without closing bracket does not match
 a literal @code{'['} on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=12378
+@c https://sourceware.org/PR12378
 @c Failing test cases:
 @c fnmatch ("[[:alpha:]'[:alpha:]\0]", "a", 0) == FNM_NOMATCH
 @c fnmatch ("[a[.\0.]]", "a", 0) == FNM_NOMATCH
diff --git a/doc/posix-functions/futimens.texi b/doc/posix-functions/futimens.texi
index 4bae2837d9..c84a035c4d 100644
--- a/doc/posix-functions/futimens.texi
+++ b/doc/posix-functions/futimens.texi
@@ -35,7 +35,7 @@ glibc 2.11, musl libc, Solaris 11.
 Out-of-range values of @code{tv_nsec} do not lead to a failure on some
 platforms:
 NetBSD 10.0,
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=32803
+@c https://sourceware.org/PR32803
 GNU/Hurd with glibc 2.41.
 @end itemize
 
diff --git a/doc/posix-functions/getpayload.texi b/doc/posix-functions/getpayload.texi
index 0cb1aeac7d..4515b4bd44 100644
--- a/doc/posix-functions/getpayload.texi
+++ b/doc/posix-functions/getpayload.texi
@@ -22,7 +22,7 @@ This function is missing on all non-glibc platforms:
 glibc 2.24, macOS 14, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0.
 @item
 This function returns a wrong result for non-NaN arguments on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=26073
+@c https://sourceware.org/PR26073
 glibc 2.31.
 @end itemize
 
diff --git a/doc/posix-functions/getpayloadf.texi b/doc/posix-functions/getpayloadf.texi
index 4550ecc2b9..4c39ae30ec 100644
--- a/doc/posix-functions/getpayloadf.texi
+++ b/doc/posix-functions/getpayloadf.texi
@@ -22,7 +22,7 @@ This function is missing on all non-glibc platforms:
 glibc 2.24, macOS 14, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0.
 @item
 This function returns a wrong result for non-NaN arguments on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=26073
+@c https://sourceware.org/PR26073
 glibc 2.31.
 @end itemize
 
diff --git a/doc/posix-functions/getpayloadl.texi b/doc/posix-functions/getpayloadl.texi
index 45f9f72330..d79f1876a5 100644
--- a/doc/posix-functions/getpayloadl.texi
+++ b/doc/posix-functions/getpayloadl.texi
@@ -22,7 +22,7 @@ This function is missing on all non-glibc platforms:
 glibc 2.24, macOS 14, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.4, Cygwin 2.9, mingw, MSVC 14, Android 9.0.
 @item
 This function returns a wrong result for non-NaN arguments on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=26073
+@c https://sourceware.org/PR26073
 glibc 2.31.
 @end itemize
 
diff --git a/doc/posix-functions/initstate.texi b/doc/posix-functions/initstate.texi
index 72df1e1596..40afe6261b 100644
--- a/doc/posix-functions/initstate.texi
+++ b/doc/posix-functions/initstate.texi
@@ -21,7 +21,7 @@ Portability problems not fixed by Gnulib:
 @itemize
 @item
 This function crashes if the state buffer is unaligned on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30584
+@c https://sourceware.org/PR30584
 glibc 2.36/sparc.
 @item
 The first parameter is @code{unsigned long} instead of @code{unsigned int} on
diff --git a/doc/posix-functions/linkat.texi b/doc/posix-functions/linkat.texi
index bb4fb5728f..8820b657e5 100644
--- a/doc/posix-functions/linkat.texi
+++ b/doc/posix-functions/linkat.texi
@@ -31,6 +31,6 @@ Portability problems not fixed by Gnulib:
 @code{linkat (fd, "directory", fd, "symlink/" ...)} sets @code{errno}
 to @code{EINVAL} instead of @code{EEXIST} or @code{ENOTDIR} on some
 platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=32569
+@c https://sourceware.org/PR32569
 GNU/Hurd with glibc 2.41.
 @end itemize
diff --git a/doc/posix-functions/longjmp.texi b/doc/posix-functions/longjmp.texi
index b6163c9dc5..8860133b6b 100644
--- a/doc/posix-functions/longjmp.texi
+++ b/doc/posix-functions/longjmp.texi
@@ -25,6 +25,6 @@ structure managed by the kernel.
 @item
 This function may crash when the invoker code was compiled with option
 @code{-D_FORTIFY_SOURCE=2},
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=32522
+@c https://sourceware.org/PR32522
 on Hurd.
 @end itemize
diff --git a/doc/posix-functions/mbrlen.texi b/doc/posix-functions/mbrlen.texi
index f37234a06e..07ece94fee 100644
--- a/doc/posix-functions/mbrlen.texi
+++ b/doc/posix-functions/mbrlen.texi
@@ -15,8 +15,8 @@ Minix 3.1.8, HP-UX 11.00, mingw.
 @item
 In the C or POSIX locales, this function can return @code{(size_t) -1}
 and set @code{errno} to @code{EILSEQ}:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=19932
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=29511
+@c https://sourceware.org/PR19932
+@c https://sourceware.org/PR29511
 glibc 2.35.
 @item
 This function returns 0 instead of @code{(size_t) -2} when the input
diff --git a/doc/posix-functions/mbrtoc16.texi b/doc/posix-functions/mbrtoc16.texi
index 9e5f13883c..c359a34d93 100644
--- a/doc/posix-functions/mbrtoc16.texi
+++ b/doc/posix-functions/mbrtoc16.texi
@@ -16,18 +16,18 @@ This function is missing on most non-glibc platforms:
 glibc 2.15, macOS 14, FreeBSD 6.4, NetBSD 10.0, OpenBSD 7.3, Minix 3.1.8, AIX 7.1, HP-UX 11.31, Solaris 11.3, Cygwin 3.4.x, mingw, MSVC 9, Android 4.4.
 @item
 This function may crash when the first argument is NULL on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=28898
+@c https://sourceware.org/PR28898
 glibc 2.36.
 @item
 In the C or POSIX locales, this function can return @code{(size_t) -1}
 and set @code{errno} to @code{EILSEQ}:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=19932
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=29511
+@c https://sourceware.org/PR19932
+@c https://sourceware.org/PR29511
 glibc 2.36.
 @item
 This function returns 0 instead of @code{(size_t) -2} when the input
 is empty:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=16950
+@c https://sourceware.org/PR16950
 glibc 2.19,
 @c https://issuetracker.google.com/issues/289419880
 Android 11.
diff --git a/doc/posix-functions/mbrtoc32.texi b/doc/posix-functions/mbrtoc32.texi
index 7048bffa07..629a75dec4 100644
--- a/doc/posix-functions/mbrtoc32.texi
+++ b/doc/posix-functions/mbrtoc32.texi
@@ -18,13 +18,13 @@ glibc 2.15, macOS 14, FreeBSD 6.4, NetBSD 10.0, OpenBSD 7.3, Minix 3.1.8, AIX 7.
 @item
 In the C or POSIX locales, this function can return @code{(size_t) -1}
 and set @code{errno} to @code{EILSEQ}:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=19932
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=29511
+@c https://sourceware.org/PR19932
+@c https://sourceware.org/PR29511
 glibc 2.35.
 @item
 This function returns 0 instead of @code{(size_t) -2} when the input
 is empty:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=16950
+@c https://sourceware.org/PR16950
 glibc 2.19,
 mingw,
 @c https://issuetracker.google.com/issues/289419880
@@ -60,7 +60,7 @@ exactly one Unicode character and thus never returns @code{(size_t) -3}.
 @item
 This function behaves incorrectly when converting precomposed characters
 from the BIG5-HKSCS encoding:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30611
+@c https://sourceware.org/PR30611
 glibc 2.36.
 @end itemize
 
diff --git a/doc/posix-functions/mbrtowc.texi b/doc/posix-functions/mbrtowc.texi
index 8674478adf..241098ac21 100644
--- a/doc/posix-functions/mbrtowc.texi
+++ b/doc/posix-functions/mbrtowc.texi
@@ -15,13 +15,13 @@ Minix 3.1.8, HP-UX 11.00, mingw.
 @item
 In the C or POSIX locales, this function can return @code{(size_t) -1}
 and set @code{errno} to @code{EILSEQ}:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=19932
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=29511
+@c https://sourceware.org/PR19932
+@c https://sourceware.org/PR29511
 glibc 2.35.
 @item
 This function returns 0 instead of @code{(size_t) -2} when the input
 is empty:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=16950
+@c https://sourceware.org/PR16950
 glibc 2.19,
 mingw with UCRT, MSVC 14, Android 11.
 @item
@@ -51,8 +51,8 @@ Portability problems not fixed by Gnulib:
 @item
 In UTF-8 locales, this function may return wide characters up to 0x7FFFFFFF
 (that is, beyond 0x0010FFFF) on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=2373
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=26034
+@c https://sourceware.org/PR2373
+@c https://sourceware.org/PR26034
 glibc 2.34.
 @item
 On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and
diff --git a/doc/posix-functions/mbsnrtowcs.texi b/doc/posix-functions/mbsnrtowcs.texi
index eb324bf27f..543f7b4187 100644
--- a/doc/posix-functions/mbsnrtowcs.texi
+++ b/doc/posix-functions/mbsnrtowcs.texi
@@ -18,8 +18,8 @@ Solaris 11.4.
 @item
 In the C or POSIX locales, this function can return @code{(size_t) -1}
 and set @code{errno} to @code{EILSEQ}:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=19932
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=29511
+@c https://sourceware.org/PR19932
+@c https://sourceware.org/PR29511
 glibc 2.35.
 @end itemize
 
diff --git a/doc/posix-functions/mbsrtowcs.texi b/doc/posix-functions/mbsrtowcs.texi
index 67ee1601c8..3967a33bf5 100644
--- a/doc/posix-functions/mbsrtowcs.texi
+++ b/doc/posix-functions/mbsrtowcs.texi
@@ -18,8 +18,8 @@ HP-UX 11, Solaris 11 2010-11.
 @item
 In the C or POSIX locales, this function can return @code{(size_t) -1}
 and set @code{errno} to @code{EILSEQ}:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=19932
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=29511
+@c https://sourceware.org/PR19932
+@c https://sourceware.org/PR29511
 glibc 2.35.
 @item
 This function does not work when the first argument is NULL on some platforms:
diff --git a/doc/posix-functions/mbstowcs.texi b/doc/posix-functions/mbstowcs.texi
index 40a1676f0c..24f9a717a7 100644
--- a/doc/posix-functions/mbstowcs.texi
+++ b/doc/posix-functions/mbstowcs.texi
@@ -12,8 +12,8 @@ Portability problems fixed by Gnulib:
 @item
 In the C or POSIX locales, this function can return @code{(size_t) -1}
 and set @code{errno} to @code{EILSEQ}:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=19932
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=29511
+@c https://sourceware.org/PR19932
+@c https://sourceware.org/PR29511
 glibc 2.35.
 @end itemize
 
diff --git a/doc/posix-functions/mbtowc.texi b/doc/posix-functions/mbtowc.texi
index d423335944..5874d5a9b4 100644
--- a/doc/posix-functions/mbtowc.texi
+++ b/doc/posix-functions/mbtowc.texi
@@ -19,12 +19,12 @@ Portability problems not fixed by Gnulib:
 @item
 In UTF-8 locales, this function may return wide characters up to 0x7FFFFFFF
 (that is, beyond 0x0010FFFF) on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=2373
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=26034
+@c https://sourceware.org/PR2373
+@c https://sourceware.org/PR26034
 glibc 2.34.
 @item
 This function accumulates hidden state on some platforms:
-glibc 2.8 (see @url{https://sourceware.org/bugzilla/show_bug.cgi?id=9674}).
+glibc 2.8 (see @url{https://sourceware.org/PR9674}).
 @item
 On Windows and 32-bit AIX platforms, @code{wchar_t} is a 16-bit type and therefore cannot
 accommodate all Unicode characters.
diff --git a/doc/posix-functions/posix_memalign.texi b/doc/posix-functions/posix_memalign.texi
index 4ca65f3ddd..2ebe14f48d 100644
--- a/doc/posix-functions/posix_memalign.texi
+++ b/doc/posix-functions/posix_memalign.texi
@@ -28,7 +28,7 @@ This function is missing on some platforms:
 Mac OS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.1.
 @item
 If the alignment and size are absurdly large, this function crashes:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=32301
+@c https://sourceware.org/PR32301
 glibc 2.41.
 @end itemize
 
diff --git a/doc/posix-functions/swprintf.texi b/doc/posix-functions/swprintf.texi
index 219fe890f3..54d3aa0f4d 100644
--- a/doc/posix-functions/swprintf.texi
+++ b/doc/posix-functions/swprintf.texi
@@ -38,7 +38,7 @@ On Windows, this function does not take a buffer size as second argument.
 @item
 This function produces wrong values for the @samp{La} directive
 on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=13726
+@c https://sourceware.org/PR13726
 glibc 2.15,
 @c https://dev.haiku-os.org/ticket/18353
 Haiku,
diff --git a/doc/posix-functions/time.texi b/doc/posix-functions/time.texi
index e48d4b46bf..49d7bad5b5 100644
--- a/doc/posix-functions/time.texi
+++ b/doc/posix-functions/time.texi
@@ -12,7 +12,7 @@ Portability problems fixed by Gnulib:
 @item
 This function is not consistent with @code{gettimeofday} and @code{timespec_get}
 on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30200
+@c https://sourceware.org/PR30200
 glibc 2.31 or newer on Linux,
 @c Only seen on machines with 2 or more CPUs.
 FreeBSD 14.0,
diff --git a/doc/posix-functions/totalorder.texi b/doc/posix-functions/totalorder.texi
index e23873465e..4a4daee66b 100644
--- a/doc/posix-functions/totalorder.texi
+++ b/doc/posix-functions/totalorder.texi
@@ -34,6 +34,6 @@ Portability problems not fixed by Gnulib:
 @itemize
 @item
 This function treats signalling NaNs incorrectly on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30973
+@c https://sourceware.org/PR30973
 glibc 2.35/sh4.
 @end itemize
diff --git a/doc/posix-functions/totalorderf.texi b/doc/posix-functions/totalorderf.texi
index bbf044a414..52aa1b0fb9 100644
--- a/doc/posix-functions/totalorderf.texi
+++ b/doc/posix-functions/totalorderf.texi
@@ -34,6 +34,6 @@ Portability problems not fixed by Gnulib:
 @itemize
 @item
 This function treats signalling NaNs incorrectly on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30973
+@c https://sourceware.org/PR30973
 glibc 2.35/sh4.
 @end itemize
diff --git a/doc/posix-functions/totalorderl.texi b/doc/posix-functions/totalorderl.texi
index cf07a9965f..7d114c91c9 100644
--- a/doc/posix-functions/totalorderl.texi
+++ b/doc/posix-functions/totalorderl.texi
@@ -34,6 +34,6 @@ Portability problems not fixed by Gnulib:
 @itemize
 @item
 This function treats signalling NaNs incorrectly on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30973
+@c https://sourceware.org/PR30973
 glibc 2.35/sh4.
 @end itemize
diff --git a/doc/posix-functions/utimensat.texi b/doc/posix-functions/utimensat.texi
index 81dd365035..fcea06423e 100644
--- a/doc/posix-functions/utimensat.texi
+++ b/doc/posix-functions/utimensat.texi
@@ -37,7 +37,7 @@ Linux kernel 2.6.32, macOS 14, NetBSD 10.0, Solaris 11.1.
 Out-of-range values of @code{tv_nsec} do not lead to a failure on some
 platforms:
 Linux kernel 2.6.22.19 on hppa, NetBSD 10.0,
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=32802
+@c https://sourceware.org/PR32802
 GNU/Hurd with glibc 2.41.
 @item
 On some platforms, this function mis-handles a trailing slash:
diff --git a/doc/posix-functions/wcscmp.texi b/doc/posix-functions/wcscmp.texi
index 961e7e0122..13e1723ead 100644
--- a/doc/posix-functions/wcscmp.texi
+++ b/doc/posix-functions/wcscmp.texi
@@ -19,7 +19,7 @@ NetBSD 10.0, OpenBSD 7.2, Solaris 11.4.
 @item
 This function may return a wrong result if the two arguments are of different
 length, on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=30620
+@c https://sourceware.org/PR30620
 glibc 2.37 on arm and arm64 CPUs,
 AIX 7.2 in 64-bit mode.
 @end itemize
diff --git a/doc/posix-headers/stdlib.texi b/doc/posix-headers/stdlib.texi
index bd402b8d95..7cf4d8d990 100644
--- a/doc/posix-headers/stdlib.texi
+++ b/doc/posix-headers/stdlib.texi
@@ -36,7 +36,7 @@ MirBSD 10.
 @item
 The macro @code{WCOREDUMP} is not defined in this header file (only in
 @code{<sys/wait.h>}) on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=32551
+@c https://sourceware.org/PR32551
 glibc 2.41.
 @end itemize
 
diff --git a/doc/posix-headers/sys_un.texi b/doc/posix-headers/sys_un.texi
index 110de5391a..a14464a4c4 100644
--- a/doc/posix-headers/sys_un.texi
+++ b/doc/posix-headers/sys_un.texi
@@ -19,7 +19,7 @@ This header file does not define the @code{sa_family_t} type on some platforms:
 Cygwin 3.5.5, mingw, MSVC 14.
 @item
 This header file causes compilation errors in C++ mode on some platforms:
-@c https://sourceware.org/bugzilla/show_bug.cgi?id=32024
+@c https://sourceware.org/PR32024
 glibc 2.41.
 @end itemize
 
diff --git a/doc/regex.texi b/doc/regex.texi
index 925b0db639..f797a019db 100644
--- a/doc/regex.texi
+++ b/doc/regex.texi
@@ -1150,11 +1150,11 @@ programs to return incorrect answers or even crash, and fixing these
 bugs has often been low-priority: for example, as of 2020 the
 @url{https://sourceware.org/bugzilla/,GNU C library bug database}
 contained back-reference bugs
-@url{https://sourceware.org/bugzilla/show_bug.cgi?id=52,,52},
-@url{https://sourceware.org/bugzilla/show_bug.cgi?id=10844,,10844},
-@url{https://sourceware.org/bugzilla/show_bug.cgi?id=11053,,11053},
-@url{https://sourceware.org/bugzilla/show_bug.cgi?id=24269,,24269}
-and @url{https://sourceware.org/bugzilla/show_bug.cgi?id=25322,,25322},
+@url{https://sourceware.org/PR52,,52},
+@url{https://sourceware.org/PR10844,,10844},
+@url{https://sourceware.org/PR11053,,11053},
+@url{https://sourceware.org/PR24269,,24269}
+and @url{https://sourceware.org/PR25322,,25322},
 with little sign of forthcoming fixes.  Luckily,
 back-references are rarely useful and it should be little trouble to
 avoid them in practical applications.
diff --git a/lib/af_alg.c b/lib/af_alg.c
index cfa96954e5..29410e3e77 100644
--- a/lib/af_alg.c
+++ b/lib/af_alg.c
@@ -189,7 +189,7 @@ afalg_stream (FILE *stream, const char *alg,
             }
 
           /* Don't assume that EOF is sticky. See:
-             <https://sourceware.org/bugzilla/show_bug.cgi?id=19476>.  */
+             <https://sourceware.org/PR19476>.  */
           if (feof (stream))
             {
               result = 0;
diff --git a/lib/copy-file-range.c b/lib/copy-file-range.c
index 2465a55802..79132dcdaf 100644
--- a/lib/copy-file-range.c
+++ b/lib/copy-file-range.c
@@ -78,7 +78,7 @@ copy_file_range (int infd, off_t *pinoff,
     {
 #   if defined __GLIBC__ && ! (2 < __GLIBC__ + (43 <= __GLIBC_MINOR__))
       /* Work around glibc bug 33245
-         <https://sourceware.org/bugzilla/show_bug.cgi?id=33245>.
+         <https://sourceware.org/PR33245>.
          This bug is present in glibc 2.42 (2025) and fixed in 2.43,
          so this workaround, and the configure-time check for glibc,
          can be removed once glibc 2.42 and earlier is no longer a
diff --git a/lib/duplocale.c b/lib/duplocale.c
index 47a626e1e6..d1ba3aa772 100644
--- a/lib/duplocale.c
+++ b/lib/duplocale.c
@@ -33,7 +33,7 @@ duplocale (locale_t locale)
 {
   /* Implement duplocale(LC_GLOBAL_LOCALE) on platforms without locale_t.
      Also, work around crash in the duplocale function in glibc < 2.12.
-     See <https://sourceware.org/bugzilla/show_bug.cgi?id=10969>.
+     See <https://sourceware.org/PR10969>.
      Also, on AIX 7.1, duplocale(LC_GLOBAL_LOCALE) returns (locale_t)0 with
      errno set to EINVAL.
      Also, on NetBSD 7.0, duplocale(LC_GLOBAL_LOCALE) returns a locale that
diff --git a/lib/fchmodat.c b/lib/fchmodat.c
index 8853d7a3ae..eb82e1cafb 100644
--- a/lib/fchmodat.c
+++ b/lib/fchmodat.c
@@ -90,7 +90,7 @@ fchmodat (int dir, char const *file, mode_t mode, int flags)
       /* Open a file descriptor with O_NOFOLLOW, to make sure we don't
          follow symbolic links, if /proc is mounted.  O_PATH is used to
          avoid a failure if the file is not readable.
-         Cf. <https://sourceware.org/bugzilla/show_bug.cgi?id=14578>  */
+         Cf. <https://sourceware.org/PR14578>  */
       int fd = openat (dir, file, O_PATH | O_NOFOLLOW | O_CLOEXEC);
       if (fd < 0)
         return fd;
diff --git a/lib/fpe-trapping.h b/lib/fpe-trapping.h
index e8952751ef..25fe6bf924 100644
--- a/lib/fpe-trapping.h
+++ b/lib/fpe-trapping.h
@@ -36,7 +36,7 @@ sigfpe_on_invalid ()
      Also, possibly a bug in glibc/sysdeps/m68k/fpu/feenablxcpt.c: it sets
      only bit 13, but should better set bits 15, 14, 13 of the control
      register together.  See
-     <https://sourceware.org/bugzilla/show_bug.cgi?id=30993>.  */
+     <https://sourceware.org/PR30993>.  */
   int ret = feenableexcept (FE_INVALID);
   if (ret == -1)
     return -1;
diff --git a/lib/freading.c b/lib/freading.c
index 1a5d0e0dad..cfa0dbb9da 100644
--- a/lib/freading.c
+++ b/lib/freading.c
@@ -22,7 +22,7 @@
 #include "stdio-impl.h"
 
 /* Don't use glibc's __freading function in glibc < 2.7, see
-   <https://sourceware.org/bugzilla/show_bug.cgi?id=4359>  */
+   <https://sourceware.org/PR4359>  */
 #if !(HAVE___FREADING && (!defined __GLIBC__ || defined __UCLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7)))
 
 bool
diff --git a/lib/gen-uni-tables.c b/lib/gen-uni-tables.c
index af6f33f17e..37f245d805 100644
--- a/lib/gen-uni-tables.c
+++ b/lib/gen-uni-tables.c
@@ -6833,8 +6833,8 @@ fill_width (const char *width_filename)
      in the U+3130..U+318F block, and these characters are mapped to legacy
      character sets, and traditional Japanese layout matters for them.
      2) glibc does the same thing, see
-     <https://sourceware.org/bugzilla/show_bug.cgi?id=21750>
-     <https://sourceware.org/bugzilla/show_bug.cgi?id=26120>
+     <https://sourceware.org/PR21750>
+     <https://sourceware.org/PR26120>
  */
 
 static bool
diff --git a/lib/getlocalename_l-unsafe.c b/lib/getlocalename_l-unsafe.c
index 66b2c74726..e27388294c 100644
--- a/lib/getlocalename_l-unsafe.c
+++ b/lib/getlocalename_l-unsafe.c
@@ -476,7 +476,7 @@ getlocalename_l_unsafe (int category, locale_t locale)
 #elif __GLIBC__ >= 2 && !defined __UCLIBC__
       /* Work around an incorrect definition of the _NL_LOCALE_NAME macro in
          glibc < 2.12.
-         See <https://sourceware.org/bugzilla/show_bug.cgi?id=10968>.  */
+         See <https://sourceware.org/PR10968>.  */
       const char *name =
         nl_langinfo_l (_NL_ITEM ((category), _NL_ITEM_INDEX (-1)), locale);
       if (name[0] == '\0')
diff --git a/lib/glthread/lock.c b/lib/glthread/lock.c
index dace4fdab6..a2c53dc7d6 100644
--- a/lib/glthread/lock.c
+++ b/lib/glthread/lock.c
@@ -255,7 +255,7 @@ glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
 #  if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP
 
 #   if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
-     /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */
+     /* glibc with bug https://sourceware.org/PR13701 */
 
 int
 glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock)
diff --git a/lib/glthread/lock.h b/lib/glthread/lock.h
index d6ccc20271..1554115a88 100644
--- a/lib/glthread/lock.h
+++ b/lib/glthread/lock.h
@@ -239,7 +239,7 @@ typedef pthread_rwlock_t gl_rwlock_t;
 #    endif
 #    define glthread_rwlock_init(LOCK) \
        (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0)
-#   else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */
+#   else /* glibc with bug https://sourceware.org/PR13701 */
 #    define gl_rwlock_initializer \
        PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP
 #    define glthread_rwlock_init(LOCK) \
diff --git a/lib/lchmod.c b/lib/lchmod.c
index 4391a4aa94..aabb15e359 100644
--- a/lib/lchmod.c
+++ b/lib/lchmod.c
@@ -43,7 +43,7 @@ lchmod (char const *file, mode_t mode)
   /* Open a file descriptor with O_NOFOLLOW, to make sure we don't
      follow symbolic links, if /proc is mounted.  O_PATH is used to
      avoid a failure if the file is not readable.
-     Cf. <https://sourceware.org/bugzilla/show_bug.cgi?id=14578>  */
+     Cf. <https://sourceware.org/PR14578>  */
   int fd = open (file, O_PATH | O_NOFOLLOW | O_CLOEXEC);
   if (fd < 0)
     return fd;
diff --git a/lib/mbtowc-lock.h b/lib/mbtowc-lock.h
index 500f74cc13..d257aaa8c8 100644
--- a/lib/mbtowc-lock.h
+++ b/lib/mbtowc-lock.h
@@ -23,7 +23,7 @@ mbtowc_unlocked (wchar_t *pwc, const char *p, size_t m)
 {
   /* Put the hidden internal state of mbtowc into an initial state.
      This is needed at least with glibc, uClibc, and MSVC CRT.
-     See <https://sourceware.org/bugzilla/show_bug.cgi?id=9674>.  */
+     See <https://sourceware.org/PR9674>.  */
   mbtowc (NULL, NULL, 0);
 
   return mbtowc (pwc, p, m);
diff --git a/lib/md5-stream.c b/lib/md5-stream.c
index fdbf97a682..a5d6a3109a 100644
--- a/lib/md5-stream.c
+++ b/lib/md5-stream.c
@@ -87,7 +87,7 @@ md5_stream (FILE *stream, void *resblock)
              or the fread() in afalg_stream may have gotten EOF.
              We need to avoid a subsequent fread() as EOF may
              not be sticky.  For details of such systems, see:
-             https://sourceware.org/bugzilla/show_bug.cgi?id=1190  */
+             https://sourceware.org/PR1190  */
           if (feof (stream))
             goto process_partial_block;
 
diff --git a/lib/nproc.c b/lib/nproc.c
index 83439aa0eb..cecf60bc6e 100644
--- a/lib/nproc.c
+++ b/lib/nproc.c
@@ -258,7 +258,7 @@ num_processors_ignoring_omp (enum nproc_query query)
      the /sys and /proc file systems (see
      glibc/sysdeps/unix/sysv/linux/getsysstats.c).
      In some situations these file systems are not mounted, and the sysconf call
-     returns 1 or 2 (<https://sourceware.org/bugzilla/show_bug.cgi?id=21542>),
+     returns 1 or 2 (<https://sourceware.org/PR21542>),
      which does not reflect the reality.  */
 
   if (query == NPROC_CURRENT)
diff --git a/lib/sched.in.h b/lib/sched.in.h
index 5b4034c340..c4103128c8 100644
--- a/lib/sched.in.h
+++ b/lib/sched.in.h
@@ -46,7 +46,7 @@
 
 /* Get pid_t.
    This is needed on glibc 2.11 (see
-   glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=13198>)
+   glibc bug <https://sourceware.org/PR13198>)
    and Mac OS X 10.5.  */
 #include <sys/types.h>
 
diff --git a/lib/sha1-stream.c b/lib/sha1-stream.c
index 32faf44bf6..8e70dc10b2 100644
--- a/lib/sha1-stream.c
+++ b/lib/sha1-stream.c
@@ -75,7 +75,7 @@ sha1_stream (FILE *stream, void *resblock)
              or the fread() in afalg_stream may have gotten EOF.
              We need to avoid a subsequent fread() as EOF may
              not be sticky.  For details of such systems, see:
-             https://sourceware.org/bugzilla/show_bug.cgi?id=1190  */
+             https://sourceware.org/PR1190  */
           if (feof (stream))
             goto process_partial_block;
 
diff --git a/lib/sha256-stream.c b/lib/sha256-stream.c
index e266807877..0a587e881d 100644
--- a/lib/sha256-stream.c
+++ b/lib/sha256-stream.c
@@ -77,7 +77,7 @@ shaxxx_stream (FILE *stream, char const *alg, void *resblock,
              or the fread() in afalg_stream may have gotten EOF.
              We need to avoid a subsequent fread() as EOF may
              not be sticky.  For details of such systems, see:
-             https://sourceware.org/bugzilla/show_bug.cgi?id=1190  */
+             https://sourceware.org/PR1190  */
           if (feof (stream))
             goto process_partial_block;
 
diff --git a/lib/sha512-stream.c b/lib/sha512-stream.c
index 2458b339a1..791ee6e8ac 100644
--- a/lib/sha512-stream.c
+++ b/lib/sha512-stream.c
@@ -77,7 +77,7 @@ shaxxx_stream (FILE *stream, char const *alg, void *resblock,
              or the fread() in afalg_stream may have gotten EOF.
              We need to avoid a subsequent fread() as EOF may
              not be sticky.  For details of such systems, see:
-             https://sourceware.org/bugzilla/show_bug.cgi?id=1190  */
+             https://sourceware.org/PR1190  */
           if (feof (stream))
             goto process_partial_block;
 
diff --git a/lib/stdio.in.h b/lib/stdio.in.h
index e80862125d..e506e30991 100644
--- a/lib/stdio.in.h
+++ b/lib/stdio.in.h
@@ -945,7 +945,7 @@ _GL_CXXALIAS_SYS (fwrite, size_t,
                    FILE *restrict stream));
 
 /* Work around bug 11959 when fortifying glibc 2.4 through 2.15
-   <https://sourceware.org/bugzilla/show_bug.cgi?id=11959>,
+   <https://sourceware.org/PR11959>,
    which sometimes causes an unwanted diagnostic for fwrite calls.
    This affects only function declaration attributes under certain
    versions of gcc and clang, and is not needed for C++.  */
diff --git a/lib/strfmon_l.c b/lib/strfmon_l.c
index 2e1b07db26..63f14aea75 100644
--- a/lib/strfmon_l.c
+++ b/lib/strfmon_l.c
@@ -120,7 +120,7 @@ ssize_t
 rpl_strfmon_l (char *s, size_t maxsize, locale_t locale, const char *format, ...)
 {
   /* Work around glibc 2.23 bug
-     <https://sourceware.org/bugzilla/show_bug.cgi?id=19633>.  */
+     <https://sourceware.org/PR19633>.  */
   va_list argptr;
   locale_t orig_locale;
   directives_t directives;
diff --git a/lib/uniwidth/width.c b/lib/uniwidth/width.c
index c99a74cb21..5ada88d9e6 100644
--- a/lib/uniwidth/width.c
+++ b/lib/uniwidth/width.c
@@ -42,8 +42,8 @@
      in the U+3130..U+318F block, and these characters are mapped to legacy
      character sets, and traditional Japanese layout matters for them.
      2) glibc does the same thing, see
-     <https://sourceware.org/bugzilla/show_bug.cgi?id=21750>
-     <https://sourceware.org/bugzilla/show_bug.cgi?id=26120>
+     <https://sourceware.org/PR21750>
+     <https://sourceware.org/PR26120>
  */
 #include "uniwidth/width0.h"
 
diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
index 3e421b87e2..9c68661204 100644
--- a/lib/vasnprintf.c
+++ b/lib/vasnprintf.c
@@ -7807,9 +7807,9 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
                         /* glibc prefers to compare the width against the number
                            of characters as well, but only for numeric conversion
                            specifiers.  See
-                           <https://sourceware.org/bugzilla/show_bug.cgi?id=28943>
-                           <https://sourceware.org/bugzilla/show_bug.cgi?id=30883>
-                           <https://sourceware.org/bugzilla/show_bug.cgi?id=31542>  */
+                           <https://sourceware.org/PR28943>
+                           <https://sourceware.org/PR30883>
+                           <https://sourceware.org/PR31542>  */
                         switch (dp->conversion)
                           {
                           case 'd': case 'i': case 'u':
diff --git a/m4/duplocale.m4 b/m4/duplocale.m4
index dba412b0f7..26f37fe6c0 100644
--- a/m4/duplocale.m4
+++ b/m4/duplocale.m4
@@ -14,7 +14,7 @@ AC_DEFUN([gl_FUNC_DUPLOCALE],
   gl_CHECK_FUNCS_ANDROID([duplocale], [[#include <locale.h>]])
   if test $ac_cv_func_duplocale = yes; then
     dnl Check against glibc bug where duplocale crashes.
-    dnl See <https://sourceware.org/bugzilla/show_bug.cgi?id=10969>.
+    dnl See <https://sourceware.org/PR10969>.
     dnl Also, on AIX 7.1, duplocale(LC_GLOBAL_LOCALE) returns (locale_t)0 with
     dnl errno set to EINVAL.
     dnl Also, on NetBSD 7.0, duplocale(LC_GLOBAL_LOCALE) returns a locale that
diff --git a/m4/fenv-environment.m4 b/m4/fenv-environment.m4
index e5f08be2ce..c35a3372d2 100644
--- a/m4/fenv-environment.m4
+++ b/m4/fenv-environment.m4
@@ -145,7 +145,7 @@ AC_DEFUN([gl_FENV_ENVIRONMENT],
       *) REPLACE_FEHOLDEXCEPT=1 ;;
     esac
     dnl The fegetenv function does not work on glibc 2.19/x86_64
-    dnl (see <https://sourceware.org/bugzilla/show_bug.cgi?id=16198>)
+    dnl (see <https://sourceware.org/PR16198>)
     dnl and Mac OS X 10.5/{i386,x86_64}.
     AC_CACHE_CHECK([whether fegetenv works],
       [gl_cv_func_fegetenv_works],
@@ -301,9 +301,9 @@ AC_DEFUN([gl_FENV_ENVIRONMENT],
       *) REPLACE_FESETENV=1 ;;
     esac
     dnl The feupdateenv function does not work on glibc 2.37/riscv64
-    dnl (see <https://sourceware.org/bugzilla/show_bug.cgi?id=31022>)
+    dnl (see <https://sourceware.org/PR31022>)
     dnl and on glibc 2.37/hppa
-    dnl (see <https://sourceware.org/bugzilla/show_bug.cgi?id=31023>)
+    dnl (see <https://sourceware.org/PR31023>)
     dnl and on glibc 2.5/{i386,x86_64,ia64} (see
     dnl <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=a8c79c4088e8c04e4297936efa0dee6c8e6e974d>)
     dnl and on Mac OS X 10.5/{i386,x86_64} (where it forgets about the currently
diff --git a/m4/fnmatch.m4 b/m4/fnmatch.m4
index 48f6c07aed..7e6a000767 100644
--- a/m4/fnmatch.m4
+++ b/m4/fnmatch.m4
@@ -81,7 +81,7 @@ AC_DEFUN([gl_FUNC_FNMATCH_POSIX],
                 return 1;
               if (!n ("*x", ".x", FNM_PERIOD))
                 return 1;
-              /* glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=361>
+              /* glibc bug <https://sourceware.org/PR361>
                  exists in glibc 2.3.3, fixed in glibc 2.5.  */
               if (!y (Apat, "\\\\", 0))
                 result |= 2;
@@ -107,14 +107,14 @@ AC_DEFUN([gl_FUNC_FNMATCH_POSIX],
                 result |= 2;
               if (!(n (apat, bs01, 0) == ('a' < '\\\\')))
                 result |= 2;
-              /* glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=12378>
+              /* glibc bug <https://sourceware.org/PR12378>
                  exists in glibc 2.12, fixed in glibc 2.13.  */
               if (!y ("[/b", "[/b", 0)) /*"]]"*/
                 result |= 4;
-              /* glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=17062>
+              /* glibc bug <https://sourceware.org/PR17062>
                  is fixed in glibc 2.20.
-                 glibc bugs <https://sourceware.org/bugzilla/show_bug.cgi?id=18032>
-                            <https://sourceware.org/bugzilla/show_bug.cgi?id=18036>
+                 glibc bugs <https://sourceware.org/PR18032>
+                            <https://sourceware.org/PR18036>
                  are fixed in glibc 2.22.
                  These bugs are not easy to test for reliably (without mmap),
                  therefore test the glibc version.  */
diff --git a/m4/free.m4 b/m4/free.m4
index 485d82433e..bf03a7d190 100644
--- a/m4/free.m4
+++ b/m4/free.m4
@@ -14,10 +14,10 @@ AC_DEFUN([gl_FUNC_FREE],
 
   dnl In the next release of POSIX, free must preserve errno.
   dnl https://www.austingroupbugs.net/view.php?id=385
-  dnl https://sourceware.org/bugzilla/show_bug.cgi?id=17924
+  dnl https://sourceware.org/PR17924
   dnl So far, we know of three platforms that do this:
   dnl * glibc >= 2.33, thanks to the fix for this bug:
-  dnl   <https://sourceware.org/bugzilla/show_bug.cgi?id=17924>
+  dnl   <https://sourceware.org/PR17924>
   dnl * OpenBSD >= 4.5, thanks to this commit:
   dnl   <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c.diff?r1=1.100&r2=1.101&f=h>
   dnl * Solaris, because its malloc() implementation is based on brk(),
diff --git a/m4/getpayload.m4 b/m4/getpayload.m4
index ba1358b09c..b403775810 100644
--- a/m4/getpayload.m4
+++ b/m4/getpayload.m4
@@ -18,7 +18,7 @@ AC_DEFUN([gl_FUNC_GETPAYLOADF],
     HAVE_GETPAYLOADF=0
   else
     dnl glibc versions < 2.32 return a wrong value,
-    dnl see <https://sourceware.org/bugzilla/show_bug.cgi?id=26073>.
+    dnl see <https://sourceware.org/PR26073>.
     AC_CACHE_CHECK([whether getpayloadf works],
       [gl_cv_func_getpayloadf_works],
       [
@@ -80,7 +80,7 @@ AC_DEFUN_ONCE([gl_FUNC_GETPAYLOAD],
     HAVE_GETPAYLOAD=0
   else
     dnl glibc versions < 2.32 return a wrong value,
-    dnl see <https://sourceware.org/bugzilla/show_bug.cgi?id=26073>.
+    dnl see <https://sourceware.org/PR26073>.
     AC_CACHE_CHECK([whether getpayload works],
       [gl_cv_func_getpayload_works],
       [
@@ -143,7 +143,7 @@ AC_DEFUN([gl_FUNC_GETPAYLOADL],
     HAVE_GETPAYLOADL=0
   else
     dnl glibc versions < 2.32 return a wrong value,
-    dnl see <https://sourceware.org/bugzilla/show_bug.cgi?id=26073>.
+    dnl see <https://sourceware.org/PR26073>.
     AC_CACHE_CHECK([whether getpayloadl works],
       [gl_cv_func_getpayloadl_works],
       [
diff --git a/m4/mbrtowc.m4 b/m4/mbrtowc.m4
index cc09a5fb5b..364295fe97 100644
--- a/m4/mbrtowc.m4
+++ b/m4/mbrtowc.m4
@@ -716,7 +716,7 @@ AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT],
 dnl Test whether mbrtowc reports encoding errors in the C locale.
 dnl Although POSIX was never intended to allow this, the GNU C Library
 dnl and other implementations do it.  See:
-dnl https://sourceware.org/bugzilla/show_bug.cgi?id=19932
+dnl https://sourceware.org/PR19932
 dnl POSIX has now clarified it:
 dnl <https://pubs.opengroup.org/onlinepubs/9699919799/functions/mbrtowc.html>
 dnl says: "In the POSIX locale an [EILSEQ] error cannot occur since all byte
diff --git a/m4/memchr.m4 b/m4/memchr.m4
index 1c2ecf1dd4..d5bce3935c 100644
--- a/m4/memchr.m4
+++ b/m4/memchr.m4
@@ -21,7 +21,7 @@ AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
   #   https://bugzilla.redhat.com/show_bug.cgi?id=499689
   # memchr should not dereference overestimated length after a match
   #   https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
-  #   https://sourceware.org/bugzilla/show_bug.cgi?id=10162
+  #   https://sourceware.org/PR10162
   # memchr should cast the second argument to 'unsigned char'.
   #   This bug exists in Android 4.3.
   # Assume that memchr works on platforms that lack mprotect.
diff --git a/m4/memmem.m4 b/m4/memmem.m4
index ce5b85990e..e940f8273f 100644
--- a/m4/memmem.m4
+++ b/m4/memmem.m4
@@ -23,7 +23,7 @@ AC_DEFUN([gl_FUNC_MEMMEM_SIMPLE],
   if test $ac_cv_have_decl_memmem = no; then
     HAVE_DECL_MEMMEM=0
   else
-    dnl Detect https://sourceware.org/bugzilla/show_bug.cgi?id=12092.
+    dnl Detect https://sourceware.org/PR12092.
     dnl Also check that we handle empty needles correctly.
     AC_CACHE_CHECK([whether memmem works],
       [gl_cv_func_memmem_works_always],
diff --git a/m4/printf.m4 b/m4/printf.m4
index 4619a40252..d48b892294 100644
--- a/m4/printf.m4
+++ b/m4/printf.m4
@@ -659,7 +659,7 @@ int main ()
           && strcmp (buf, "0x8.0p-2") != 0))
     result |= 16;
   /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a
-     glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>
+     glibc 2.4 bug <https://sourceware.org/PR2908>
      and a FreeBSD 6.4, NetBSD 10.0 bug.  */
   if (sprintf (buf, "%.1La", 1.999L) < 0
       || (strcmp (buf, "0x1.0p+1") != 0
diff --git a/m4/pthread_rwlock_rdlock.m4 b/m4/pthread_rwlock_rdlock.m4
index aec9f076d4..260bc28702 100644
--- a/m4/pthread_rwlock_rdlock.m4
+++ b/m4/pthread_rwlock_rdlock.m4
@@ -32,7 +32,7 @@ dnl https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rd
 dnl but this test verifies the guarantee regardless of TPS and regardless of
 dnl scheduling policy.
 dnl Glibc does not provide this guarantee (and never will on Linux), see
-dnl https://sourceware.org/bugzilla/show_bug.cgi?id=13701
+dnl https://sourceware.org/PR13701
 dnl https://bugzilla.redhat.com/show_bug.cgi?id=1410052
 AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER],
 [
diff --git a/m4/strcasestr.m4 b/m4/strcasestr.m4
index eb2862f1aa..b1cd97f6e6 100644
--- a/m4/strcasestr.m4
+++ b/m4/strcasestr.m4
@@ -22,8 +22,8 @@ AC_DEFUN([gl_FUNC_STRCASESTR_SIMPLE],
     if test $REPLACE_MEMCHR = 1; then
       REPLACE_STRCASESTR=1
     else
-      dnl Detect https://sourceware.org/bugzilla/show_bug.cgi?id=12092
-      dnl and https://sourceware.org/bugzilla/show_bug.cgi?id=23637.
+      dnl Detect https://sourceware.org/PR12092
+      dnl and https://sourceware.org/PR23637.
       AC_CACHE_CHECK([whether strcasestr works],
         [gl_cv_func_strcasestr_works_always],
         [AC_RUN_IFELSE(
diff --git a/m4/strerrorname_np.m4 b/m4/strerrorname_np.m4
index 61e11f0ec4..3b7f2a7289 100644
--- a/m4/strerrorname_np.m4
+++ b/m4/strerrorname_np.m4
@@ -38,13 +38,13 @@ AC_DEFUN([gl_CHECK_STRERRORNAME_NP],
   if test $ac_cv_func_strerrorname_np = yes; then
     dnl In glibc 2.32, strerrorname_np returns English error descriptions, not
     dnl error names.
-    dnl See <https://sourceware.org/bugzilla/show_bug.cgi?id=26555>.
+    dnl See <https://sourceware.org/PR26555>.
     dnl In glibc 2.36, strerrorname_np returns NULL for EDEADLOCK on powerpc and
     dnl sparc platforms.
-    dnl See <https://sourceware.org/bugzilla/show_bug.cgi?id=29545>.
+    dnl See <https://sourceware.org/PR29545>.
     dnl In glibc 2.37, strerrorname_np returns NULL for ENOSYM and
     dnl EREMOTERELEASE on hppa platforms.
-    dnl See <https://sourceware.org/bugzilla/show_bug.cgi?id=31080>.
+    dnl See <https://sourceware.org/PR31080>.
     dnl In Solaris 11 OmniOS, strerrorname_np returns NULL for ERESTART
     dnl and ESTRPIPE.
     dnl see <https://www.illumos.org/issues/17134>.
diff --git a/m4/strfmon_l.m4 b/m4/strfmon_l.m4
index eba0a2c00a..e21fd21ce7 100644
--- a/m4/strfmon_l.m4
+++ b/m4/strfmon_l.m4
@@ -20,7 +20,7 @@ AC_DEFUN([gl_FUNC_STRFMON_L],
 
   AC_CHECK_FUNCS_ONCE([strfmon_l])
   if test $ac_cv_func_strfmon_l = yes; then
-    dnl Test for bug <https://sourceware.org/bugzilla/show_bug.cgi?id=19633>
+    dnl Test for bug <https://sourceware.org/PR19633>
     dnl which was fixed in glibc-2.24.
     AC_CACHE_CHECK([whether strfmon_l works],
       [gl_cv_strfmon_l_works],
diff --git a/m4/strstr.m4 b/m4/strstr.m4
index 1b5ef6c102..1be2721cac 100644
--- a/m4/strstr.m4
+++ b/m4/strstr.m4
@@ -14,8 +14,8 @@ AC_DEFUN([gl_FUNC_STRSTR_SIMPLE],
   if test $REPLACE_MEMCHR = 1; then
     REPLACE_STRSTR=1
   else
-    dnl Detect https://sourceware.org/bugzilla/show_bug.cgi?id=12092
-    dnl and https://sourceware.org/bugzilla/show_bug.cgi?id=23637.
+    dnl Detect https://sourceware.org/PR12092
+    dnl and https://sourceware.org/PR23637.
     AC_CACHE_CHECK([whether strstr works],
       [gl_cv_func_strstr_works_always],
       [AC_RUN_IFELSE(
diff --git a/m4/strtok_r.m4 b/m4/strtok_r.m4
index d40342bed4..e98dac605f 100644
--- a/m4/strtok_r.m4
+++ b/m4/strtok_r.m4
@@ -21,7 +21,7 @@ AC_DEFUN([gl_FUNC_STRTOK_R],
     dnl when the second argument to strtok_r is a constant string that has
     dnl exactly one byte and compiling with optimization.  This bug is, for
     dnl example, present in the glibc 2.7-18 package in Debian "lenny".
-    dnl See <https://sourceware.org/bugzilla/show_bug.cgi?id=5614>.
+    dnl See <https://sourceware.org/PR5614>.
     AC_CACHE_CHECK([whether strtok_r works], [gl_cv_func_strtok_r_works],
       [AC_RUN_IFELSE(
          [AC_LANG_PROGRAM([[
diff --git a/m4/time.m4 b/m4/time.m4
index f63ec12f87..8c3ec9444a 100644
--- a/m4/time.m4
+++ b/m4/time.m4
@@ -11,7 +11,7 @@ dnl From Bruno Haible.
 AC_DEFUN([gl_FUNC_TIME],
 [
   AC_REQUIRE([AC_CANONICAL_HOST])
-  dnl glibc has the bug https://sourceware.org/bugzilla/show_bug.cgi?id=30200 .
+  dnl glibc has the bug https://sourceware.org/PR30200 .
   AC_CACHE_CHECK([whether time() works],
     [gl_cv_func_time_works],
     [dnl Guess that it works except on
diff --git a/m4/wchar_h.m4 b/m4/wchar_h.m4
index 722fcfc2d6..053bafd2f3 100644
--- a/m4/wchar_h.m4
+++ b/m4/wchar_h.m4
@@ -65,7 +65,7 @@ dnl Check whether <wchar.h> is usable at all.
 AC_DEFUN([gl_WCHAR_H_INLINE_OK],
 [
   dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
-  dnl 'gnu_inline'. See <https://sourceware.org/bugzilla/show_bug.cgi?id=4022>
+  dnl 'gnu_inline'. See <https://sourceware.org/PR4022>
   dnl and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
   dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
   dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
diff --git a/tests/test-execute-script.c b/tests/test-execute-script.c
index ad5e23ffee..1304909837 100644
--- a/tests/test-execute-script.c
+++ b/tests/test-execute-script.c
@@ -34,7 +34,7 @@ main ()
 
   /* Check an invocation of an executable script.
      This should only be supported if the script has a '#!' marker; otherwise
-     it is unsecure: <https://sourceware.org/bugzilla/show_bug.cgi?id=13134>.
+     it is unsecure: <https://sourceware.org/PR13134>.
      POSIX says that the execlp() and execvp() functions support executing
      shell scripts
      <https://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html>,
diff --git a/tests/test-exp2.h b/tests/test-exp2.h
index bed46a2dac..7035b81078 100644
--- a/tests/test-exp2.h
+++ b/tests/test-exp2.h
@@ -35,7 +35,7 @@ test_function (void)
     DOUBLE y = EXP2 (x);
     ASSERT (y == L_(1.0));
   }
-  /* <https://sourceware.org/bugzilla/show_bug.cgi?id=13824> */
+  /* <https://sourceware.org/PR13824> */
 #if !(__GLIBC__ == 2 && __GLIBC_MINOR__ < 16 && (defined __sparc || defined __powerpc__))
   {
     int e;
diff --git a/tests/test-fnmatch.c b/tests/test-fnmatch.c
index c8447cd239..f3c119b498 100644
--- a/tests/test-fnmatch.c
+++ b/tests/test-fnmatch.c
@@ -574,7 +574,7 @@ main (int argc, char *argv[])
     ASSERT (fnmatch ("*x", ".x", FNM_PERIOD) == FNM_NOMATCH);
     if (argc == 1 || strcmp (argv[1], "1") == 0)
       {
-        /* glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=361>
+        /* glibc bug <https://sourceware.org/PR361>
            exists in glibc 2.3.3, fixed in glibc 2.5.  */
         ASSERT (fnmatch (Apat, "\\", 0) == 0);
         ASSERT (fnmatch (Apat, "A", 0) == 0);
@@ -589,7 +589,7 @@ main (int argc, char *argv[])
         ASSERT (fnmatch (Apat, bs01, 0) == ('A' < '\\' ? FNM_NOMATCH : 0));
         ASSERT (fnmatch (apat, bs01, 0) == ('a' < '\\' ? FNM_NOMATCH : 0));
       }
-    /* glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=12378>
+    /* glibc bug <https://sourceware.org/PR12378>
        exists in glibc 2.12, fixed in glibc 2.13.  */
     ASSERT (fnmatch ("[/b", "[/b", 0) == 0);
     /* This test fails on FreeBSD 13.2, NetBSD 9.3, Cygwin 3.4.6.  */
diff --git a/tests/test-getaddrinfo.c b/tests/test-getaddrinfo.c
index dfa794791e..de0f4b3208 100644
--- a/tests/test-getaddrinfo.c
+++ b/tests/test-getaddrinfo.c
@@ -223,7 +223,7 @@ int main (void)
 #endif
 #if !defined __GLIBC__
           /* avoid glibc bug, possibly
-             <https://sourceware.org/bugzilla/show_bug.cgi?id=32465> */
+             <https://sourceware.org/PR32465> */
           + simple (3, HOST1, SERV1)
           + simple (3, HOST2, SERV2)
           + simple (3, HOST3, SERV3)
diff --git a/tests/test-getopt.h b/tests/test-getopt.h
index 86ac014ef0..b244ead900 100644
--- a/tests/test-getopt.h
+++ b/tests/test-getopt.h
@@ -1368,7 +1368,7 @@ test_getopt (void)
     }
 
   /* Check that 'W' does not dump core:
-     https://sourceware.org/bugzilla/show_bug.cgi?id=12922
+     https://sourceware.org/PR12922
      Technically, POSIX says the presence of ';' in the opt-string
      gives unspecified behavior, so we only test this when GNU compliance
      is desired.  */
diff --git a/tests/test-getopt_long.h b/tests/test-getopt_long.h
index 33eea00734..73433cea3b 100644
--- a/tests/test-getopt_long.h
+++ b/tests/test-getopt_long.h
@@ -315,7 +315,7 @@ test_getopt_long (void)
   }
 
   /* Test that 'W' does not dump core:
-     https://sourceware.org/bugzilla/show_bug.cgi?id=12922  */
+     https://sourceware.org/PR12922  */
   {
     int argc = 0;
     const char *argv[10];
diff --git a/tests/test-gettimeofday.c b/tests/test-gettimeofday.c
index 4bd7a2b6e4..8b55ac002c 100644
--- a/tests/test-gettimeofday.c
+++ b/tests/test-gettimeofday.c
@@ -72,7 +72,7 @@ test_consistency ()
   /* Verify that the tv_sec field of the result is the same as time(NULL).  */
   /* Note: It's here that the dependency to the 'time' module is needed.
      Without it, this assertion would sometimes fail on glibc systems, see
-     https://sourceware.org/bugzilla/show_bug.cgi?id=30200  */
+     https://sourceware.org/PR30200  */
   ASSERT (tv1.tv_sec <= tt2);
   ASSERT (tt2 <= tv3.tv_sec);
   ASSERT (tv3.tv_sec <= tt4);
diff --git a/tests/test-mbrtoc32-regular.c b/tests/test-mbrtoc32-regular.c
index 4a7ce0f132..d4b7139eda 100644
--- a/tests/test-mbrtoc32-regular.c
+++ b/tests/test-mbrtoc32-regular.c
@@ -53,7 +53,7 @@ main (int argc, char *argv[])
      0x88 0xA5    U+00EA U+030C    LATIN SMALL LETTER E WITH CIRCUMFLEX AND CARON
 
      Test one of them.
-     See <https://sourceware.org/bugzilla/show_bug.cgi?id=30611>.  */
+     See <https://sourceware.org/PR30611>.  */
   mbstate_t state;
   memset (&state, '\0', sizeof (mbstate_t));
   char32_t c32 = (char32_t) 0xBADFACE;
diff --git a/tests/test-perror2.c b/tests/test-perror2.c
index b8999e1e89..a0c87b230f 100644
--- a/tests/test-perror2.c
+++ b/tests/test-perror2.c
@@ -126,7 +126,7 @@ main (void)
        https://sourceware.org/ml/newlib/2011/msg00228.html */
     ASSERT (errno > 0);
     /* Commented out until glibc behaves:
-       https://sourceware.org/bugzilla/show_bug.cgi?id=12792 */
+       https://sourceware.org/PR12792 */
     ASSERT (ferror (stderr));
 #endif
   }
diff --git a/tests/test-posix_spawn-script.c b/tests/test-posix_spawn-script.c
index ef002152d8..2eaa386045 100644
--- a/tests/test-posix_spawn-script.c
+++ b/tests/test-posix_spawn-script.c
@@ -37,7 +37,7 @@ main ()
 
   /* Check an invocation of an executable script.
      This should only be supported if the script has a '#!' marker; otherwise
-     it is unsecure: <https://sourceware.org/bugzilla/show_bug.cgi?id=13134>.
+     it is unsecure: <https://sourceware.org/PR13134>.
      POSIX says that the execlp() and execvp() functions support executing
      shell scripts
      <https://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html>,
diff --git a/tests/test-posix_spawnp-script.c b/tests/test-posix_spawnp-script.c
index 10f0ef39fb..52e7028487 100644
--- a/tests/test-posix_spawnp-script.c
+++ b/tests/test-posix_spawnp-script.c
@@ -37,7 +37,7 @@ main ()
 
   /* Check an invocation of an executable script.
      This should only be supported if the script has a '#!' marker; otherwise
-     it is unsecure: <https://sourceware.org/bugzilla/show_bug.cgi?id=13134>.
+     it is unsecure: <https://sourceware.org/PR13134>.
      POSIX says that the execlp() and execvp() functions support executing
      shell scripts
      <https://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html>,
diff --git a/tests/test-random_r.c b/tests/test-random_r.c
index 1c0ffdac5f..d86252e24e 100644
--- a/tests/test-random_r.c
+++ b/tests/test-random_r.c
@@ -32,7 +32,7 @@ SIGNATURE_CHECK (random_r, int, (struct random_data *, int32_t *));
 #include "macros.h"
 
 /* Note: This test crashes on glibc/SPARC systems.
-   Reported at <https://sourceware.org/bugzilla/show_bug.cgi?id=30584>.  */
+   Reported at <https://sourceware.org/PR30584>.  */
 
 static int
 test_failed (int alignment)
diff --git a/tests/test-realloc-posix.c b/tests/test-realloc-posix.c
index 93b3c4d5df..d50f860351 100644
--- a/tests/test-realloc-posix.c
+++ b/tests/test-realloc-posix.c
@@ -61,7 +61,7 @@ main (int argc, _GL_UNUSED char **argv)
       void *r = realloc (p, PTRDIFF_MAX + one);
       ASSERT (r == NULL);
       /* Avoid a test failure due to glibc bug
-         <https://sourceware.org/bugzilla/show_bug.cgi?id=27870>.  */
+         <https://sourceware.org/PR27870>.  */
       if (!getenv ("MALLOC_CHECK_"))
         ASSERT (errno == ENOMEM);
     }
diff --git a/tests/test-sigsegv-catch-stackoverflow1.c b/tests/test-sigsegv-catch-stackoverflow1.c
index 59a3163059..a37912f3dd 100644
--- a/tests/test-sigsegv-catch-stackoverflow1.c
+++ b/tests/test-sigsegv-catch-stackoverflow1.c
@@ -20,7 +20,7 @@
 
 /* On GNU/Hurd, when compiling with -D_FORTIFY_SOURCE=2, avoid an error
    "*** longjmp causes uninitialized stack frame ***: terminated".
-   Cf. <https://sourceware.org/bugzilla/show_bug.cgi?id=32522>  */
+   Cf. <https://sourceware.org/PR32522>  */
 #ifdef __gnu_hurd__
 # undef _FORTIFY_SOURCE
 # undef __USE_FORTIFY_LEVEL
diff --git a/tests/test-sigsegv-catch-stackoverflow2.c b/tests/test-sigsegv-catch-stackoverflow2.c
index 3bace66df5..1b49442d6a 100644
--- a/tests/test-sigsegv-catch-stackoverflow2.c
+++ b/tests/test-sigsegv-catch-stackoverflow2.c
@@ -20,7 +20,7 @@
 
 /* On GNU/Hurd, when compiling with -D_FORTIFY_SOURCE=2, avoid an error
    "*** longjmp causes uninitialized stack frame ***: terminated".
-   Cf. <https://sourceware.org/bugzilla/show_bug.cgi?id=32522>  */
+   Cf. <https://sourceware.org/PR32522>  */
 #ifdef __gnu_hurd__
 # undef _FORTIFY_SOURCE
 # undef __USE_FORTIFY_LEVEL
diff --git a/tests/test-snprintf-posix.h b/tests/test-snprintf-posix.h
index 3fc18c4ba0..918b992f5a 100644
--- a/tests/test-snprintf-posix.h
+++ b/tests/test-snprintf-posix.h
@@ -604,7 +604,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
 
   { /* Rounding can turn a ...FFF into a ...000.
        This shows a Mac OS X 10.3.9 (Darwin 7.9) bug and a
-       glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>.  */
+       glibc 2.4 bug <https://sourceware.org/PR2908>.  */
     int retval =
       my_snprintf (result, sizeof (result), "%.1La %d", 1.999L, 33, 44, 55);
     ASSERT (strcmp (result, "0x1.0p+1 33") == 0
diff --git a/tests/test-spawn-pipe-script.c b/tests/test-spawn-pipe-script.c
index 34e9af7fa8..fbeee01fa3 100644
--- a/tests/test-spawn-pipe-script.c
+++ b/tests/test-spawn-pipe-script.c
@@ -31,7 +31,7 @@ main ()
 {
   /* Check an invocation of an executable script.
      This should only be supported if the script has a '#!' marker; otherwise
-     it is unsecure: <https://sourceware.org/bugzilla/show_bug.cgi?id=13134>.
+     it is unsecure: <https://sourceware.org/PR13134>.
      POSIX says that the execlp() and execvp() functions support executing
      shell scripts
      <https://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html>,
diff --git a/tests/test-sprintf-posix.h b/tests/test-sprintf-posix.h
index aa09853651..f60a6e0a05 100644
--- a/tests/test-sprintf-posix.h
+++ b/tests/test-sprintf-posix.h
@@ -590,7 +590,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
 
   { /* Rounding can turn a ...FFF into a ...000.
        This shows a Mac OS X 10.3.9 (Darwin 7.9) bug and a
-       glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>.  */
+       glibc 2.4 bug <https://sourceware.org/PR2908>.  */
     int retval =
       my_sprintf (result, "%.1La %d", 1.999L, 33, 44, 55);
     ASSERT (strcmp (result, "0x1.0p+1 33") == 0
diff --git a/tests/test-strfmon_l.c b/tests/test-strfmon_l.c
index a57ce0de2e..fce75e4048 100644
--- a/tests/test-strfmon_l.c
+++ b/tests/test-strfmon_l.c
@@ -52,7 +52,7 @@ main (void)
   }
 
   /* Test whether the decimal point comes from the right locale:
-     glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=19633>.  */
+     glibc bug <https://sourceware.org/PR19633>.  */
   if (setlocale (LC_ALL, "en_US.UTF-8") == NULL)
     {
       if (test_exit_status != EXIT_SUCCESS)
diff --git a/tests/test-strtod.h b/tests/test-strtod.h
index 92c07ff690..75e14b44e9 100644
--- a/tests/test-strtod.h
+++ b/tests/test-strtod.h
@@ -567,7 +567,7 @@ test_function (double (*my_strtod) (const char *, char **))
     ASSERT (-DBL_MIN <= result && result <= 0.0);
 #endif
     /* Negative underflow.  Expect a negative sign, although POSIX allows +0.0.
-       See also <https://sourceware.org/bugzilla/show_bug.cgi?id=5995>.  */
+       See also <https://sourceware.org/PR5995>.  */
     ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* glibc-2.3.6, mingw */
     ASSERT (ptr == input + 10);
     ASSERT (errno == ERANGE);
diff --git a/tests/test-strtof.h b/tests/test-strtof.h
index 031a6c8a05..d137c4d514 100644
--- a/tests/test-strtof.h
+++ b/tests/test-strtof.h
@@ -567,7 +567,7 @@ test_function (float (*my_strtof) (const char *, char **))
     ASSERT (-FLT_MIN <= result && result <= 0.0f);
 #endif
     /* Negative underflow.  Expect a negative sign, although POSIX allows +0.0f.
-       See also <https://sourceware.org/bugzilla/show_bug.cgi?id=5995>.  */
+       See also <https://sourceware.org/PR5995>.  */
     ASSERT (!!signbit (result) == !!signbit (minus_zerof)); /* glibc-2.3.6, mingw */
     ASSERT (ptr == input + 10);
     ASSERT (errno == ERANGE);
diff --git a/tests/test-strtold.h b/tests/test-strtold.h
index 1fecfb8cc4..37f537fa83 100644
--- a/tests/test-strtold.h
+++ b/tests/test-strtold.h
@@ -575,7 +575,7 @@ test_function (long double (*my_strtold) (const char *, char **))
     ASSERT (-LDBL_MIN <= result && result <= 0.0L);
 #endif
     /* Negative underflow.  Expect a negative sign, although POSIX allows +0.0L.
-       See also <https://sourceware.org/bugzilla/show_bug.cgi?id=5995>.  */
+       See also <https://sourceware.org/PR5995>.  */
     ASSERT (!!signbit (result) == !!signbit (minus_zerol)); /* glibc-2.3.2, Haiku */
     ASSERT (ptr == input + 10);
     ASSERT (errno == ERANGE);
diff --git a/tests/test-timespec_get.c b/tests/test-timespec_get.c
index d837aa2b5e..eb9c047228 100644
--- a/tests/test-timespec_get.c
+++ b/tests/test-timespec_get.c
@@ -48,7 +48,7 @@ main (void)
   /* Verify that the tv_sec field of the result is the same as time(NULL).  */
   /* Note: It's here that the dependency to the 'time' module is needed.
      Without it, this assertion would sometimes fail on glibc systems, see
-     https://sourceware.org/bugzilla/show_bug.cgi?id=30200  */
+     https://sourceware.org/PR30200  */
   ASSERT (ts1.tv_sec <= tt2);
   ASSERT (tt2 <= ts3.tv_sec);
   ASSERT (ts3.tv_sec <= tt4);
diff --git a/tests/test-vasnprintf-posix.c b/tests/test-vasnprintf-posix.c
index e382a9ce5f..fe91cb4515 100644
--- a/tests/test-vasnprintf-posix.c
+++ b/tests/test-vasnprintf-posix.c
@@ -783,7 +783,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
 
   { /* Rounding can turn a ...FFF into a ...000.
        This shows a Mac OS X 10.3.9 (Darwin 7.9) bug and a
-       glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>.  */
+       glibc 2.4 bug <https://sourceware.org/PR2908>.  */
     size_t length;
     char *result =
       my_asnprintf (NULL, &length, "%.1La %d", 1.999L, 33, 44, 55);
diff --git a/tests/test-vasnprintf-posix2.c b/tests/test-vasnprintf-posix2.c
index 55af1f7484..3a27af1780 100644
--- a/tests/test-vasnprintf-posix2.c
+++ b/tests/test-vasnprintf-posix2.c
@@ -142,7 +142,7 @@ main (int argc, char *argv[])
         {
           /* But there are good arguments for adding the grouping character
              within the leading zeroes.
-             <https://sourceware.org/bugzilla/show_bug.cgi?id=23432>  */
+             <https://sourceware.org/PR23432>  */
           ASSERT (length == 10 + 3 * separator_len);
           ASSERT (memcmp (result, "0", 1) == 0
                   && memcmp (result + 1, separator, separator_len) == 0
@@ -171,7 +171,7 @@ main (int argc, char *argv[])
         {
           /* But there are good arguments for adding the grouping character
              within the leading zeroes.
-             <https://sourceware.org/bugzilla/show_bug.cgi?id=23432>  */
+             <https://sourceware.org/PR23432>  */
           ASSERT (length == 11 + 3 * separator_len);
           ASSERT (memcmp (result, "-0", 2) == 0
                   && memcmp (result + 2, separator, separator_len) == 0
@@ -204,9 +204,9 @@ main (int argc, char *argv[])
             {
               /* Result according to glibc, which measures the width in
                  multibyte characters or column positions.
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=28943>
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=30883>
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=31542>  */
+                 <https://sourceware.org/PR28943>
+                 <https://sourceware.org/PR30883>
+                 <https://sourceware.org/PR31542>  */
               ASSERT (length == 9 + separator_len);
               ASSERT (memcmp (result, "     1", 6) == 0
                       && memcmp (result + 6, separator, separator_len) == 0
@@ -241,9 +241,9 @@ main (int argc, char *argv[])
             {
               /* Result according to glibc, which measures the width in
                  multibyte characters or column positions.
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=28943>
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=30883>
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=31542>  */
+                 <https://sourceware.org/PR28943>
+                 <https://sourceware.org/PR30883>
+                 <https://sourceware.org/PR31542>  */
               ASSERT (length == 9 + separator_len);
               ASSERT (memcmp (result, "    -1", 6) == 0
                       && memcmp (result + 6, separator, separator_len) == 0
@@ -318,9 +318,9 @@ main (int argc, char *argv[])
             {
               /* Result according to glibc, which measures the width in
                  multibyte characters or column positions.
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=28943>
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=30883>
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=31542>  */
+                 <https://sourceware.org/PR28943>
+                 <https://sourceware.org/PR30883>
+                 <https://sourceware.org/PR31542>  */
               ASSERT (length == 9 + separator_len);
               ASSERT (memcmp (result, "000001", 6) == 0
                       && memcmp (result + 6, separator, separator_len) == 0
@@ -424,9 +424,9 @@ main (int argc, char *argv[])
             {
               /* Result according to glibc, which measures the width in
                  multibyte characters or column positions.
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=28943>
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=30883>
-                 <https://sourceware.org/bugzilla/show_bug.cgi?id=31542>  */
+                 <https://sourceware.org/PR28943>
+                 <https://sourceware.org/PR30883>
+                 <https://sourceware.org/PR31542>  */
               ASSERT (length == 9 + separator_len);
               ASSERT (memcmp (result, "000001", 6) == 0
                       && memcmp (result + 6, separator, separator_len) == 0
diff --git a/tests/test-vasnwprintf-posix.c b/tests/test-vasnwprintf-posix.c
index af7bd60bda..aad15df7aa 100644
--- a/tests/test-vasnwprintf-posix.c
+++ b/tests/test-vasnwprintf-posix.c
@@ -783,7 +783,7 @@ test_function (wchar_t * (*my_asnwprintf) (wchar_t *, size_t *, const wchar_t *,
 
   { /* Rounding can turn a ...FFF into a ...000.
        This shows a Mac OS X 10.3.9 (Darwin 7.9) bug and a
-       glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>.  */
+       glibc 2.4 bug <https://sourceware.org/PR2908>.  */
     size_t length;
     wchar_t *result =
       my_asnwprintf (NULL, &length, L"%.1La %d", 1.999L, 33, 44, 55);
diff --git a/tests/test-vasnwprintf-posix2.c b/tests/test-vasnwprintf-posix2.c
index 719c932a41..e48b9672c0 100644
--- a/tests/test-vasnwprintf-posix2.c
+++ b/tests/test-vasnwprintf-posix2.c
@@ -156,7 +156,7 @@ main (int argc, char *argv[])
         {
           /* But there are good arguments for adding the grouping character
              within the leading zeroes too.
-             <https://sourceware.org/bugzilla/show_bug.cgi?id=23432>  */
+             <https://sourceware.org/PR23432>  */
           ASSERT (length == 10 + 3 * separator_len);
           ASSERT (wmemcmp (result, L"0", 1) == 0
                   && wmemcmp (result + 1, separator, separator_len) == 0
@@ -185,7 +185,7 @@ main (int argc, char *argv[])
         {
           /* But there are good arguments for adding the grouping character
              within the leading zeroes too.
-             <https://sourceware.org/bugzilla/show_bug.cgi?id=23432>  */
+             <https://sourceware.org/PR23432>  */
           ASSERT (length == 11 + 3 * separator_len);
           ASSERT (wmemcmp (result, L"-0", 2) == 0
                   && wmemcmp (result + 2, separator, separator_len) == 0
diff --git a/tests/test-vasprintf-posix.c b/tests/test-vasprintf-posix.c
index fe929b65ad..df88c48f5b 100644
--- a/tests/test-vasprintf-posix.c
+++ b/tests/test-vasprintf-posix.c
@@ -764,7 +764,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
 
   { /* Rounding can turn a ...FFF into a ...000.
        This shows a Mac OS X 10.3.9 (Darwin 7.9) bug and a
-       glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>.  */
+       glibc 2.4 bug <https://sourceware.org/PR2908>.  */
     char *result;
     int retval =
       my_asprintf (&result, "%.1La %d", 1.999L, 33, 44, 55);
diff --git a/tests/test-xstrtod.c b/tests/test-xstrtod.c
index 7c894a41e9..d858da6a1e 100644
--- a/tests/test-xstrtod.c
+++ b/tests/test-xstrtod.c
@@ -694,7 +694,7 @@ main ()
     ASSERT (ok);
     ASSERT (result == 0.0);
     /* Negative underflow.  Expect a negative sign, although POSIX allows +0.0.
-       See also <https://sourceware.org/bugzilla/show_bug.cgi?id=5995>.  */
+       See also <https://sourceware.org/PR5995>.  */
     ASSERT (!!signbit (result) == !!signbit (minus_zerod));
     ASSERT (ptr == input + 10);
     ASSERT (errno == ERANGE);
diff --git a/tests/test-xstrtold.c b/tests/test-xstrtold.c
index 361a9ce9dd..2c4311c9d6 100644
--- a/tests/test-xstrtold.c
+++ b/tests/test-xstrtold.c
@@ -702,7 +702,7 @@ main ()
     ASSERT (ok);
     ASSERT (result == 0.0L);
     /* Negative underflow.  Expect a negative sign, although POSIX allows +0.0L.
-       See also <https://sourceware.org/bugzilla/show_bug.cgi?id=5995>.  */
+       See also <https://sourceware.org/PR5995>.  */
     ASSERT (!!signbit (result) == !!signbit (minus_zerol));
     ASSERT (ptr == input + 10);
     ASSERT (errno == ERANGE);
-- 
2.48.1

From 2410984b5bd06e4548dfbc09c85eee35e268e3dc Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email-masked]>
Date: Sat, 2 Aug 2025 10:25:13 -0700
Subject: [PATCH 2/2] Shorten GCC bug URLs

---
 build-aux/gcc-warning.spec     |  2 +-
 doc/posix-headers/stddef.texi  |  2 +-
 lib/alignalloc.h               |  2 +-
 lib/c++defs.h                  |  4 ++--
 lib/careadlinkat.c             |  4 ++--
 lib/float.in.h                 |  8 ++++----
 lib/free.c                     |  2 +-
 lib/intprops-internal.h        |  4 ++--
 lib/realloc.c                  |  2 +-
 lib/savedir.c                  |  2 +-
 lib/signed-nan.h               | 12 ++++++------
 lib/stddef.in.h                |  4 ++--
 lib/strftime.c                 |  2 +-
 lib/string.in.h                |  2 +-
 lib/totalorder.c               |  2 +-
 lib/totalorderf.c              |  2 +-
 lib/totalordermag.c            |  2 +-
 lib/totalordermagf.c           |  2 +-
 lib/wchar.in.h                 |  2 +-
 m4/btowc.m4                    |  2 +-
 m4/extern-inline.m4            |  4 ++--
 m4/gnulib-common.m4            |  4 ++--
 m4/manywarnings.m4             |  2 +-
 m4/nullptr.m4                  |  2 +-
 m4/stdalign.m4                 |  4 ++--
 m4/stddef_h.m4                 |  4 ++--
 m4/wchar_h.m4                  |  2 +-
 modules/uniname/uniname        |  2 +-
 tests/test-canonicalize-lgpl.c |  2 +-
 tests/test-canonicalize.c      |  2 +-
 tests/test-intprops.c          |  2 +-
 tests/test-ptsname_r.c         |  2 +-
 tests/test-sprintf-posix.h     |  2 +-
 33 files changed, 49 insertions(+), 49 deletions(-)

diff --git a/build-aux/gcc-warning.spec b/build-aux/gcc-warning.spec
index e147f49149..926895883a 100644
--- a/build-aux/gcc-warning.spec
+++ b/build-aux/gcc-warning.spec
@@ -354,7 +354,7 @@
 -Wstringop-overread			default
 -Wstringop-truncation			default
 -Wsubobject-linkage			c++ and objc++
--Wsuggest-attribute=returns_nonnull	https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114833
+-Wsuggest-attribute=returns_nonnull	https://gcc.gnu.org/PR114833
 -Wsuggest-override			c++ and objc++
 -Wsurprising				fortran
 -Wswitch				enabled by -Wall
diff --git a/doc/posix-headers/stddef.texi b/doc/posix-headers/stddef.texi
index 7f7af3bdef..74516edba9 100644
--- a/doc/posix-headers/stddef.texi
+++ b/doc/posix-headers/stddef.texi
@@ -46,7 +46,7 @@ GCC 12, Clang 15, and other pre-2023 C compilers.
 @item
 Some platforms define @code{nullptr_t} even when @code{<stddef.h>} is
 not included:
-@c https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114869
+@c https://gcc.gnu.org/PR114869
 GCC 14
 
 @item
diff --git a/lib/alignalloc.h b/lib/alignalloc.h
index 2cd4050753..15974b5cbb 100644
--- a/lib/alignalloc.h
+++ b/lib/alignalloc.h
@@ -53,7 +53,7 @@ extern "C" {
 #endif
 
 /* Work around AddressSanitizer bug.
-   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104262
+   https://gcc.gnu.org/PR104262
    https://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20220124/1001910.html
    */
 #ifdef __SANITIZE_ADDRESS__
diff --git a/lib/c++defs.h b/lib/c++defs.h
index df98a5ae57..b77979a325 100644
--- a/lib/c++defs.h
+++ b/lib/c++defs.h
@@ -310,7 +310,7 @@
    _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
 # define _GL_CXXALIASWARN_1(func,namespace) \
    _GL_CXXALIASWARN_2 (func, namespace)
-/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+/* To work around GCC bug <https://gcc.gnu.org/PR43881>,
    we enable the warning only when not optimizing.  */
 # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__)
 #  define _GL_CXXALIASWARN_2(func,namespace) \
@@ -338,7 +338,7 @@
                         GNULIB_NAMESPACE)
 # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
    _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
-/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+/* To work around GCC bug <https://gcc.gnu.org/PR43881>,
    we enable the warning only when not optimizing.  */
 # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__)
 #  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
diff --git a/lib/careadlinkat.c b/lib/careadlinkat.c
index 9ec3ca3322..8f4a3c1a70 100644
--- a/lib/careadlinkat.c
+++ b/lib/careadlinkat.c
@@ -45,7 +45,7 @@ enum { STACK_BUF_SIZE = 1024 };
    If GCC_LINT is defined, do not inline this function with GCC 10.1
    and later, to avoid creating a pointer to the stack that GCC
    -Wreturn-local-addr incorrectly complains about.  See:
-   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644
+   https://gcc.gnu.org/PR93644
    Although the noinline attribute can hurt performance a bit, no better way
    to pacify GCC is known; even an explicit #pragma does not pacify GCC.
    When the GCC bug is fixed this workaround should be limited to the
@@ -174,7 +174,7 @@ careadlinkat (int fd, char const *filename,
      shrinking realloc.  */
   #ifdef GCC_BOGUS_WRETURN_LOCAL_ADDR
    #warning "GCC might issue a bogus -Wreturn-local-addr warning here."
-   #warning "See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644>."
+   #warning "See <https://gcc.gnu.org/PR93644>."
   #endif
   char stack_buf[STACK_BUF_SIZE];
   return readlink_stk (fd, filename, buffer, buffer_size, alloc,
diff --git a/lib/float.in.h b/lib/float.in.h
index ab7ea6d561..3093f9a01d 100644
--- a/lib/float.in.h
+++ b/lib/float.in.h
@@ -135,7 +135,7 @@ extern const union gl_long_double_union gl_LDBL_MAX;
    which represents 0x1.fffffffffffff7ffffffffffff8p+1023L.
    Although computations can yield representations of numbers larger than this,
    these computations are considered to have overflowed and behavior is undefined.
-   See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120993>.  */
+   See <https://gcc.gnu.org/PR120993>.  */
 # undef LDBL_MAX
 # define LDBL_MAX 0x1.fffffffffffff7ffffffffffff8p+1023L
 
@@ -234,7 +234,7 @@ extern const union gl_long_double_union gl_LDBL_TRUE_MIN;
 # define FLT_NORM_MAX FLT_MAX
 #endif
 #ifndef FLT_SNAN
-/* For sh, beware of <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111814>.  */
+/* For sh, beware of <https://gcc.gnu.org/PR111814>.  */
 # if ((__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__) && !defined __sh__
 #  define FLT_SNAN __builtin_nansf ("")
 # else
@@ -258,7 +258,7 @@ extern gl_FLT_SNAN_t gl_FLT_SNAN;
 # define DBL_NORM_MAX DBL_MAX
 #endif
 #ifndef DBL_SNAN
-/* For sh, beware of <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111814>.  */
+/* For sh, beware of <https://gcc.gnu.org/PR111814>.  */
 # if ((__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__) && !defined __sh__
 #  define DBL_SNAN __builtin_nans ("")
 # else
@@ -290,7 +290,7 @@ extern gl_DBL_SNAN_t gl_DBL_SNAN;
 # endif
 #endif
 #ifndef LDBL_SNAN
-/* For sh, beware of <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111814>.  */
+/* For sh, beware of <https://gcc.gnu.org/PR111814>.  */
 # if ((__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__) && !defined __sh__
 #  define LDBL_SNAN __builtin_nansl ("")
 # else
diff --git a/lib/free.c b/lib/free.c
index 98ceafd7da..394d8d1390 100644
--- a/lib/free.c
+++ b/lib/free.c
@@ -33,7 +33,7 @@ rpl_free (void *p)
 {
 # if defined __GNUC__ && !defined __clang__
   /* An invalid GCC optimization
-     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98396>
+     <https://gcc.gnu.org/PR98396>
      would optimize away the assignments in the code below, when link-time
      optimization (LTO) is enabled.  Make the code more complicated, so that
      GCC does not grok how to optimize it.  */
diff --git a/lib/intprops-internal.h b/lib/intprops-internal.h
index 62de3c889e..ab1a94f86d 100644
--- a/lib/intprops-internal.h
+++ b/lib/intprops-internal.h
@@ -112,7 +112,7 @@
 #elif defined __has_builtin
 # define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow)
 /* __builtin_{add,sub}_overflow exists but is not reliable in GCC 5.x and 6.x,
-   see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269>.  */
+   see <https://gcc.gnu.org/PR98269>.  */
 #elif 7 <= __GNUC__
 # define _GL_HAS_BUILTIN_ADD_OVERFLOW 1
 #else
@@ -184,7 +184,7 @@
 #endif
 
 /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390.  See:
-   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193
+   https://gcc.gnu.org/PR68193
    https://llvm.org/bugs/show_bug.cgi?id=25390
    For now, assume GCC < 14 and all Clang versions generate bogus
    warnings for _Generic.  This matters only for compilers that
diff --git a/lib/realloc.c b/lib/realloc.c
index 4237501097..62efd5a39f 100644
--- a/lib/realloc.c
+++ b/lib/realloc.c
@@ -50,7 +50,7 @@ rpl_realloc (void *p, size_t n)
          undefined behavior even though C17 and earlier partially defined
          the behavior.  Let the programmer know.
          When the undefined-behaviour sanitizers report this case, i.e. when
-         <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117233> and
+         <https://gcc.gnu.org/PR117233> and
          <https://github.com/llvm/llvm-project/issues/113065>
          have been closed and new releases of GCC and clang have been made,
          we can revisit this code.  */
diff --git a/lib/savedir.c b/lib/savedir.c
index 40e3b8cebc..2e4f6f9a7c 100644
--- a/lib/savedir.c
+++ b/lib/savedir.c
@@ -41,7 +41,7 @@
 #include "attribute.h"
 #include "xalloc.h"
 
-/* Pacify GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113963>.  */
+/* Pacify GCC bug <https://gcc.gnu.org/PR113963>.  */
 #if _GL_GNUC_PREREQ (13, 0)
 # pragma GCC diagnostic ignored "-Wanalyzer-malloc-leak"
 # pragma GCC diagnostic ignored "-Wanalyzer-null-dereference"
diff --git a/lib/signed-nan.h b/lib/signed-nan.h
index fcc12d34cf..41360db556 100644
--- a/lib/signed-nan.h
+++ b/lib/signed-nan.h
@@ -53,7 +53,7 @@ _GL_UNUSED static float
 positive_NaNf ()
 {
   /* 'volatile' works around a GCC bug:
-     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */
+     <https://gcc.gnu.org/PR111655>  */
   float volatile nan = NaNf ();
   return (signbit (nan) ? minus_NaNf (nan) : nan);
 }
@@ -63,7 +63,7 @@ _GL_UNUSED static float
 negative_NaNf ()
 {
   /* 'volatile' works around a GCC bug:
-     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */
+     <https://gcc.gnu.org/PR111655>  */
   float volatile nan = NaNf ();
   return (signbit (nan) ? nan : minus_NaNf (nan));
 }
@@ -91,7 +91,7 @@ _GL_UNUSED static double
 positive_NaNd ()
 {
   /* 'volatile' works around a GCC bug:
-     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */
+     <https://gcc.gnu.org/PR111655>  */
   double volatile nan = NaNd ();
   return (signbit (nan) ? minus_NaNd (nan) : nan);
 }
@@ -101,7 +101,7 @@ _GL_UNUSED static double
 negative_NaNd ()
 {
   /* 'volatile' works around a GCC bug:
-     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */
+     <https://gcc.gnu.org/PR111655>  */
   double volatile nan = NaNd ();
   return (signbit (nan) ? nan : minus_NaNd (nan));
 }
@@ -120,7 +120,7 @@ _GL_UNUSED static long double
 positive_NaNl ()
 {
   /* 'volatile' works around a GCC bug:
-     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */
+     <https://gcc.gnu.org/PR111655>  */
   long double volatile nan = NaNl ();
   return (signbit (nan) ? minus_NaNl (nan) : nan);
 }
@@ -130,7 +130,7 @@ _GL_UNUSED static long double
 negative_NaNl ()
 {
   /* 'volatile' works around a GCC bug:
-     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */
+     <https://gcc.gnu.org/PR111655>  */
   long double volatile nan = NaNl ();
   return (signbit (nan) ? nan : minus_NaNl (nan));
 }
diff --git a/lib/stddef.in.h b/lib/stddef.in.h
index e8c55ff1cd..9ad768d785 100644
--- a/lib/stddef.in.h
+++ b/lib/stddef.in.h
@@ -32,7 +32,7 @@
      || defined __need_wint_t)                                      \
     /* Avoid warning triggered by "gcc -std=gnu23 -Wsystem-headers" \
        in GCC 13.3 and 14.2                                         \
-       <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114870>.  */   \
+       <https://gcc.gnu.org/PR114870>.  */   \
     && !@STDDEF_NOT_IDEMPOTENT@
 /* Special invocation convention inside gcc header files.  In
    particular, <stddef.h> in some ancient versions of GCC blindly
@@ -91,7 +91,7 @@ typedef long max_align_t;
 
 #  if !defined _GCC_NULLPTR_T && !@NULLPTR_T_NEEDS_STDDEF@
     /* Suppress unwanted nullptr_t typedef.  See
-       <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114869>.  */
+       <https://gcc.gnu.org/PR114869>.  */
 #   define _GCC_NULLPTR_T
 #  endif
 
diff --git a/lib/strftime.c b/lib/strftime.c
index 537172d8be..27e2ca0976 100644
--- a/lib/strftime.c
+++ b/lib/strftime.c
@@ -355,7 +355,7 @@ enum pad_style
 /* Avoid false GCC warning "'memset' specified size 18446744073709551615 exceeds
    maximum object size 9223372036854775807", caused by insufficient data flow
    analysis and value propagation of the 'width_add' expansion when GCC is not
-   optimizing.  Cf. <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88443>.  */
+   optimizing.  Cf. <https://gcc.gnu.org/PR88443>.  */
 #if _GL_GNUC_PREREQ (7, 0) && !__OPTIMIZE__
 # pragma GCC diagnostic ignored "-Wstringop-overflow"
 #endif
diff --git a/lib/string.in.h b/lib/string.in.h
index 9a039c7ba0..4333055993 100644
--- a/lib/string.in.h
+++ b/lib/string.in.h
@@ -96,7 +96,7 @@
 /* Applies to: functions.  Cannot be used on inline functions.  */
 #ifndef _GL_ATTRIBUTE_DEALLOC_FREE
 # if defined __cplusplus && defined __GNUC__ && !defined __clang__
-/* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */
+/* Work around GCC bug <https://gcc.gnu.org/PR108231> */
 #  define _GL_ATTRIBUTE_DEALLOC_FREE \
      _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1)
 # else
diff --git a/lib/totalorder.c b/lib/totalorder.c
index 5824da836f..0da878d54a 100644
--- a/lib/totalorder.c
+++ b/lib/totalorder.c
@@ -60,7 +60,7 @@ totalorder (double const *x, double const *y)
 # if defined __GNUC__ || defined __clang__
   /* Prevent gcc and clang from reusing the values of *x and *y (fetched above)
      in optimized inlined memcpy expansions.
-     Seen with gcc <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114659>
+     Seen with gcc <https://gcc.gnu.org/PR114659>
      and with clang 16.0.6 on OpenBSD 7.5.  */
   __asm__ __volatile__ ("" : : : "memory");
 # endif
diff --git a/lib/totalorderf.c b/lib/totalorderf.c
index 88c8580f9d..ae4a2b3c98 100644
--- a/lib/totalorderf.c
+++ b/lib/totalorderf.c
@@ -60,7 +60,7 @@ totalorderf (float const *x, float const *y)
 # if defined __GNUC__ || defined __clang__
   /* Prevent gcc and clang from reusing the values of *x and *y (fetched above)
      in optimized inlined memcpy expansions.
-     Seen with gcc <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114659>
+     Seen with gcc <https://gcc.gnu.org/PR114659>
      and with clang 16.0.6 on OpenBSD 7.5.  */
   __asm__ __volatile__ ("" : : : "memory");
 # endif
diff --git a/lib/totalordermag.c b/lib/totalordermag.c
index 3893ccf94d..68f5becec2 100644
--- a/lib/totalordermag.c
+++ b/lib/totalordermag.c
@@ -60,7 +60,7 @@ totalordermag (double const *x, double const *y)
 #  if defined __GNUC__ || defined __clang__
   /* Prevent gcc and clang from reusing the values of *x and *y (fetched above)
      in optimized inlined memcpy expansions.
-     Seen with gcc <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114659>
+     Seen with gcc <https://gcc.gnu.org/PR114659>
      and with clang 16.0.6 on OpenBSD 7.5.  */
   __asm__ __volatile__ ("" : : : "memory");
 #  endif
diff --git a/lib/totalordermagf.c b/lib/totalordermagf.c
index b6879e2d27..9fec2cf7fc 100644
--- a/lib/totalordermagf.c
+++ b/lib/totalordermagf.c
@@ -60,7 +60,7 @@ totalordermagf (float const *x, float const *y)
 #  if defined __GNUC__ || defined __clang__
   /* Prevent gcc and clang from reusing the values of *x and *y (fetched above)
      in optimized inlined memcpy expansions.
-     Seen with gcc <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114659>
+     Seen with gcc <https://gcc.gnu.org/PR114659>
      and with clang 16.0.6 on OpenBSD 7.5.  */
   __asm__ __volatile__ ("" : : : "memory");
 #  endif
diff --git a/lib/wchar.in.h b/lib/wchar.in.h
index a6c52eb9c6..23d8b3c5bf 100644
--- a/lib/wchar.in.h
+++ b/lib/wchar.in.h
@@ -110,7 +110,7 @@
 /* Applies to: functions.  Cannot be used on inline functions.  */
 #ifndef _GL_ATTRIBUTE_DEALLOC_FREE
 # if defined __cplusplus && defined __GNUC__ && !defined __clang__
-/* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */
+/* Work around GCC bug <https://gcc.gnu.org/PR108231> */
 #  define _GL_ATTRIBUTE_DEALLOC_FREE \
      _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1)
 # else
diff --git a/m4/btowc.m4 b/m4/btowc.m4
index 59d52be6f6..fd18db753e 100644
--- a/m4/btowc.m4
+++ b/m4/btowc.m4
@@ -13,7 +13,7 @@ AC_DEFUN([gl_FUNC_BTOWC],
 
   dnl Check whether <wchar.h> is usable at all, first. Otherwise the test
   dnl program below may lead to an endless loop. See
-  dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>.
+  dnl <https://gcc.gnu.org/PR42440>.
   AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
 
   AC_CHECK_FUNCS_ONCE([btowc])
diff --git a/m4/extern-inline.m4 b/m4/extern-inline.m4
index d4fe6d82a5..0ebcba3475 100644
--- a/m4/extern-inline.m4
+++ b/m4/extern-inline.m4
@@ -112,8 +112,8 @@ AC_DEFUN([gl_EXTERN_INLINE],
    suppress bogus "no previous prototype for 'FOO'"
    and "no previous declaration for 'FOO'" diagnostics,
    when FOO is an inline function in the header; see
-   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
-   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>.  */
+   <https://gcc.gnu.org/PR54113> and
+   <https://gcc.gnu.org/PR63877>.  */
 #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
 # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
 #  define _GL_INLINE_HEADER_CONST_PRAGMA
diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4
index 034dae69e6..134bfba21d 100644
--- a/m4/gnulib-common.m4
+++ b/m4/gnulib-common.m4
@@ -168,7 +168,7 @@ AC_DEFUN([gl_COMMON_BODY], [
       ======================================================================
       This gives a syntax error
         - in C mode with gcc
-          <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108796>, and
+          <https://gcc.gnu.org/PR108796>, and
         - in C++ mode with clang++ version < 16, and
         - in C++ mode, inside extern "C" {}, still in newer clang++ versions
           <https://github.com/llvm/llvm-project/issues/101990>.
@@ -451,7 +451,7 @@ AC_DEFUN([gl_COMMON_BODY], [
    yet.  */
 #ifndef _GL_ATTRIBUTE_DEALLOC_FREE
 # if defined __cplusplus && defined __GNUC__ && !defined __clang__
-/* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */
+/* Work around GCC bug <https://gcc.gnu.org/PR108231> */
 #  define _GL_ATTRIBUTE_DEALLOC_FREE \
      _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1)
 # else
diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4
index eebba90180..bb5b4e10cd 100644
--- a/m4/manywarnings.m4
+++ b/m4/manywarnings.m4
@@ -198,7 +198,7 @@ AC_DEFUN([gl_MANYWARN_ALL_GCC(C)],
   fi
 
   # This warning have too many false alarms in GCC 11.2.1.
-  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101713
+  # https://gcc.gnu.org/PR101713
   AS_VAR_APPEND([$1], [' -Wno-analyzer-malloc-leak'])
 
   AC_LANG_POP([C])
diff --git a/m4/nullptr.m4 b/m4/nullptr.m4
index aa457ed2b6..2c0bdde8aa 100644
--- a/m4/nullptr.m4
+++ b/m4/nullptr.m4
@@ -16,7 +16,7 @@ AC_DEFUN([gl_NULLPTR],
        [AC_COMPILE_IFELSE(
           [AC_LANG_SOURCE([[int *p = nullptr;]])],
           [gl_cv_c_nullptr=yes
-           # Work around <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114780>.
+           # Work around <https://gcc.gnu.org/PR114780>.
            gl_saved_CFLAGS=$CFLAGS
            CFLAGS="$CFLAGS -Wall -Werror"
            AC_COMPILE_IFELSE(
diff --git a/m4/stdalign.m4 b/m4/stdalign.m4
index 885feafdd8..d22360e107 100644
--- a/m4/stdalign.m4
+++ b/m4/stdalign.m4
@@ -30,7 +30,7 @@ AC_DEFUN([gl_ALIGNASOF],
 
             /* Test that alignof yields a result consistent with offsetof.
                This catches GCC bug 52023
-               <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>.  */
+               <https://gcc.gnu.org/PR52023>.  */
             #ifdef __cplusplus
                template <class t> struct alignof_helper { char a; t b; };
             # define ao(type) offsetof (alignof_helper<type>, b)
@@ -103,7 +103,7 @@ AC_DEFUN([gl_ALIGNASOF],
    want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc.  */
 
 /* GCC releases before GCC 4.9 had a bug in _Alignof.  See GCC bug 52023
-   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>.
+   <https://gcc.gnu.org/PR52023>.
    clang versions < 8.0.0 have the same bug.
    IBM XL C V16.1.0 cc (non-clang) has the same bug.  */
 #  if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \
diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4
index 127ec05b60..d52d549489 100644
--- a/m4/stddef_h.m4
+++ b/m4/stddef_h.m4
@@ -85,7 +85,7 @@ AC_DEFUN_ONCE([gl_STDDEF_H],
   dnl Provide gl_unreachable() unconditionally.
   GL_GENERATE_STDDEF_H=true
 
-  dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114869
+  dnl https://gcc.gnu.org/PR114869
   AC_CACHE_CHECK([whether nullptr_t needs <stddef.h>],
     [gl_cv_nullptr_t_needs_stddef],
     [AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[nullptr_t x;]],
@@ -96,7 +96,7 @@ AC_DEFUN_ONCE([gl_STDDEF_H],
     GL_GENERATE_STDDEF_H=true
   fi
 
-  dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114870
+  dnl https://gcc.gnu.org/PR114870
   dnl affects GCC 13.3 and 14.2.
   AC_CACHE_CHECK([whether <stddef.h> is idempotent],
     [gl_cv_stddef_idempotent],
diff --git a/m4/wchar_h.m4 b/m4/wchar_h.m4
index 053bafd2f3..f88294e7c4 100644
--- a/m4/wchar_h.m4
+++ b/m4/wchar_h.m4
@@ -66,7 +66,7 @@ AC_DEFUN([gl_WCHAR_H_INLINE_OK],
 [
   dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
   dnl 'gnu_inline'. See <https://sourceware.org/PR4022>
-  dnl and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
+  dnl and <https://gcc.gnu.org/PR42440>. In summary,
   dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
   dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
   AC_REQUIRE([AC_CANONICAL_HOST])
diff --git a/modules/uniname/uniname b/modules/uniname/uniname
index d0951d8472..5813e92ada 100644
--- a/modules/uniname/uniname
+++ b/modules/uniname/uniname
@@ -19,7 +19,7 @@ gl_LIBUNISTRING_MODULE([1.3], [uniname/uniname])
 Makefile.am:
 if LIBUNISTRING_COMPILE_UNINAME_UNINAME
 # Note: Compilation of this file takes a long time with gcc ≥ 11 and option
-# -fanalyzer. See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110112>.
+# -fanalyzer. See <https://gcc.gnu.org/PR110112>.
 # The best workaround is to install GNU libunistring first, and use module
 # 'libunistring-optional' in your package.
 # An alternative workaround would be to pass the option -fno-analyzer, using
diff --git a/tests/test-canonicalize-lgpl.c b/tests/test-canonicalize-lgpl.c
index 5450bb9b14..84f94f232d 100644
--- a/tests/test-canonicalize-lgpl.c
+++ b/tests/test-canonicalize-lgpl.c
@@ -125,7 +125,7 @@ main (void)
     /* This test works only if the canonicalize_file_name implementation
        comes from gnulib.  If it comes from libc, we have no way to prevent
        gcc from "optimizing" the null_ptr function in invalid ways.  See
-       <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93156>.  */
+       <https://gcc.gnu.org/PR93156>.  */
 #if GNULIB_defined_canonicalize_file_name
     errno = 0;
     result = canonicalize_file_name (null_ptr ());
diff --git a/tests/test-canonicalize.c b/tests/test-canonicalize.c
index 083bf1703a..662f9b0762 100644
--- a/tests/test-canonicalize.c
+++ b/tests/test-canonicalize.c
@@ -129,7 +129,7 @@ main (void)
     /* This test works only if the canonicalize_file_name implementation
        comes from gnulib.  If it comes from libc, we have no way to prevent
        gcc from "optimizing" the null_ptr function in invalid ways.  See
-       <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93156>.  */
+       <https://gcc.gnu.org/PR93156>.  */
 #if GNULIB_defined_canonicalize_file_name
     errno = 0;
     result1 = canonicalize_file_name (null_ptr ());
diff --git a/tests/test-intprops.c b/tests/test-intprops.c
index d16b67b5ce..cce1386e24 100644
--- a/tests/test-intprops.c
+++ b/tests/test-intprops.c
@@ -26,7 +26,7 @@
 # pragma GCC diagnostic ignored "-Wtype-limits"
 
 /* Work around a bug in GCC 6.1 and earlier; see:
-   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68971  */
+   https://gcc.gnu.org/PR68971  */
 # pragma GCC diagnostic ignored "-Woverflow"
 
 #endif
diff --git a/tests/test-ptsname_r.c b/tests/test-ptsname_r.c
index 270ff86a9d..b793805542 100644
--- a/tests/test-ptsname_r.c
+++ b/tests/test-ptsname_r.c
@@ -95,7 +95,7 @@ test_errors (int fd, const char *slave)
   /* This test works only if the ptsname_r implementation comes from gnulib.
      If it comes from libc, we have no way to prevent gcc from "optimizing"
      the null_ptr function in invalid ways.  See
-     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93156>.  */
+     <https://gcc.gnu.org/PR93156>.  */
 #if GNULIB_defined_ptsname_r
   result = ptsname_r (fd, null_ptr (), 0);
   ASSERT (result != 0);
diff --git a/tests/test-sprintf-posix.h b/tests/test-sprintf-posix.h
index f60a6e0a05..0b5110519d 100644
--- a/tests/test-sprintf-posix.h
+++ b/tests/test-sprintf-posix.h
@@ -3168,7 +3168,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
     /* This test is known to fail
          - on musl libc,
          - with GCC 14.1, 13.2, 12.3, and 11.4
-           <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114876>  */
+           <https://gcc.gnu.org/PR114876>  */
     ASSERT (memcmp (result, "a\0z 33\0", 6 + 1) == 0);
     ASSERT (retval == 6);
   }
-- 
2.48.1