diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index 8534cc54c13..2d33d919585 100644
--- a/config/c-compiler.m4
+++ b/config/c-compiler.m4
@@ -553,19 +553,23 @@ fi])# PGAC_HAVE_GCC__ATOMIC_INT64_CAS
 # the other ones are, on x86-64 platforms)
 #
 # If the intrinsics are supported, sets pgac_sse42_crc32_intrinsics.
+#
+# To detect the case where the compiler knows the function but library support
+# is missing, we must link not just compile, and store the results in global
+# variables so the compiler doesn't optimize away the call.
 AC_DEFUN([PGAC_SSE42_CRC32_INTRINSICS],
 [define([Ac_cachevar], [AS_TR_SH([pgac_cv_sse42_crc32_intrinsics])])dnl
 AC_CACHE_CHECK([for _mm_crc32_u8 and _mm_crc32_u32], [Ac_cachevar],
 [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <nmmintrin.h>
+    unsigned int crc;
     #if defined(__has_attribute) && __has_attribute (target)
     __attribute__((target("sse4.2")))
     #endif
     static int crc32_sse42_test(void)
     {
-      unsigned int crc = 0;
       crc = _mm_crc32_u8(crc, 0);
       crc = _mm_crc32_u32(crc, 0);
-      /* return computed value, to prevent the above being optimized away */
+      /* else this function could get optimized away altogether: */
       return crc == 0;
     }],
   [return crc32_sse42_test();])],
@@ -593,13 +597,13 @@ AC_DEFUN([PGAC_ARMV8_CRC32C_INTRINSICS],
 AC_CACHE_CHECK([for __crc32cb, __crc32ch, __crc32cw, and __crc32cd with CFLAGS=$1], [Ac_cachevar],
 [pgac_save_CFLAGS=$CFLAGS
 CFLAGS="$pgac_save_CFLAGS $1"
-AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <arm_acle.h>],
-  [unsigned int crc = 0;
-   crc = __crc32cb(crc, 0);
+AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <arm_acle.h>
+unsigned int crc;],
+  [crc = __crc32cb(crc, 0);
    crc = __crc32ch(crc, 0);
    crc = __crc32cw(crc, 0);
    crc = __crc32cd(crc, 0);
-   /* return computed value, to prevent the above being optimized away */
+   /* return computed value, just to be extra sure this isn't optimized away */
    return crc == 0;])],
   [Ac_cachevar=yes],
   [Ac_cachevar=no])
@@ -628,13 +632,12 @@ AC_DEFUN([PGAC_LOONGARCH_CRC32C_INTRINSICS],
 AC_CACHE_CHECK(
   [for __builtin_loongarch_crcc_w_b_w, __builtin_loongarch_crcc_w_h_w, __builtin_loongarch_crcc_w_w_w and __builtin_loongarch_crcc_w_d_w],
   [Ac_cachevar],
-[AC_LINK_IFELSE([AC_LANG_PROGRAM([],
-  [unsigned int crc = 0;
-   crc = __builtin_loongarch_crcc_w_b_w(0, crc);
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([unsigned int crc;],
+  [crc = __builtin_loongarch_crcc_w_b_w(0, crc);
    crc = __builtin_loongarch_crcc_w_h_w(0, crc);
    crc = __builtin_loongarch_crcc_w_w_w(0, crc);
    crc = __builtin_loongarch_crcc_w_d_w(0, crc);
-   /* return computed value, to prevent the above being optimized away */
+   /* return computed value, just to be extra sure this isn't optimized away */
    return crc == 0;])],
   [Ac_cachevar=yes],
   [Ac_cachevar=no])])
diff --git a/configure b/configure
index 93fddd69981..1e685514777 100755
--- a/configure
+++ b/configure
@@ -17391,15 +17391,15 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <nmmintrin.h>
+    unsigned int crc;
     #if defined(__has_attribute) && __has_attribute (target)
     __attribute__((target("sse4.2")))
     #endif
     static int crc32_sse42_test(void)
     {
-      unsigned int crc = 0;
       crc = _mm_crc32_u8(crc, 0);
       crc = _mm_crc32_u32(crc, 0);
-      /* return computed value, to prevent the above being optimized away */
+      /* else this function could get optimized away altogether: */
       return crc == 0;
     }
 int
@@ -17463,15 +17463,15 @@ CFLAGS="$pgac_save_CFLAGS "
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <arm_acle.h>
+unsigned int crc;
 int
 main ()
 {
-unsigned int crc = 0;
-   crc = __crc32cb(crc, 0);
+crc = __crc32cb(crc, 0);
    crc = __crc32ch(crc, 0);
    crc = __crc32cw(crc, 0);
    crc = __crc32cd(crc, 0);
-   /* return computed value, to prevent the above being optimized away */
+   /* return computed value, just to be extra sure this isn't optimized away */
    return crc == 0;
   ;
   return 0;
@@ -17504,15 +17504,15 @@ CFLAGS="$pgac_save_CFLAGS -march=armv8-a+crc+simd"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <arm_acle.h>
+unsigned int crc;
 int
 main ()
 {
-unsigned int crc = 0;
-   crc = __crc32cb(crc, 0);
+crc = __crc32cb(crc, 0);
    crc = __crc32ch(crc, 0);
    crc = __crc32cw(crc, 0);
    crc = __crc32cd(crc, 0);
-   /* return computed value, to prevent the above being optimized away */
+   /* return computed value, just to be extra sure this isn't optimized away */
    return crc == 0;
   ;
   return 0;
@@ -17545,15 +17545,15 @@ CFLAGS="$pgac_save_CFLAGS -march=armv8-a+crc"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <arm_acle.h>
+unsigned int crc;
 int
 main ()
 {
-unsigned int crc = 0;
-   crc = __crc32cb(crc, 0);
+crc = __crc32cb(crc, 0);
    crc = __crc32ch(crc, 0);
    crc = __crc32cw(crc, 0);
    crc = __crc32cd(crc, 0);
-   /* return computed value, to prevent the above being optimized away */
+   /* return computed value, just to be extra sure this isn't optimized away */
    return crc == 0;
   ;
   return 0;
@@ -17589,16 +17589,15 @@ if ${pgac_cv_loongarch_crc32c_intrinsics+:} false; then :
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
+unsigned int crc;
 int
 main ()
 {
-unsigned int crc = 0;
-   crc = __builtin_loongarch_crcc_w_b_w(0, crc);
+crc = __builtin_loongarch_crcc_w_b_w(0, crc);
    crc = __builtin_loongarch_crcc_w_h_w(0, crc);
    crc = __builtin_loongarch_crcc_w_w_w(0, crc);
    crc = __builtin_loongarch_crcc_w_d_w(0, crc);
-   /* return computed value, to prevent the above being optimized away */
+   /* return computed value, just to be extra sure this isn't optimized away */
    return crc == 0;
   ;
   return 0;
diff --git a/meson.build b/meson.build
index 13c13748e5d..599942800fd 100644
--- a/meson.build
+++ b/meson.build
@@ -2323,16 +2323,15 @@ if host_cpu == 'x86' or host_cpu == 'x86_64'
 
     prog = '''
 #include <nmmintrin.h>
-
+unsigned int crc;
 #if defined(__has_attribute) && __has_attribute (target)
 __attribute__((target("sse4.2")))
 #endif
 int main(void)
 {
-    unsigned int crc = 0;
     crc = _mm_crc32_u8(crc, 0);
     crc = _mm_crc32_u32(crc, 0);
-    /* return computed value, to prevent the above being optimized away */
+    /* else this function could get optimized away altogether: */
     return crc == 0;
 }
 '''
@@ -2358,16 +2357,15 @@ elif host_cpu == 'arm' or host_cpu == 'aarch64'
 
   prog = '''
 #include <arm_acle.h>
-
+unsigned int crc;
 int main(void)
 {
-    unsigned int crc = 0;
     crc = __crc32cb(crc, 0);
     crc = __crc32ch(crc, 0);
     crc = __crc32cw(crc, 0);
     crc = __crc32cd(crc, 0);
 
-    /* return computed value, to prevent the above being optimized away */
+    /* return computed value, just to be extra sure this isn't optimized away */
     return crc == 0;
 }
 '''
@@ -2396,15 +2394,15 @@ int main(void)
 elif host_cpu == 'loongarch64'
 
   prog = '''
+unsigned int crc;
 int main(void)
 {
-    unsigned int crc = 0;
     crc = __builtin_loongarch_crcc_w_b_w(0, crc);
     crc = __builtin_loongarch_crcc_w_h_w(0, crc);
     crc = __builtin_loongarch_crcc_w_w_w(0, crc);
     crc = __builtin_loongarch_crcc_w_d_w(0, crc);
 
-    /* return computed value, to prevent the above being optimized away */
+    /* return computed value, just to be extra sure this isn't optimized away */
     return crc == 0;
 }
 '''
