Use correct preprocessor conditional in relptr.h
authorPeter Eisentraut <[email protected]>
Sat, 13 Dec 2025 18:56:09 +0000 (19:56 +0100)
committerPeter Eisentraut <[email protected]>
Sat, 13 Dec 2025 18:56:09 +0000 (19:56 +0100)
When relptr.h was added (commit fbc1c12a94a), there was no check for
HAVE_TYPEOF, so it used HAVE__BUILTIN_TYPES_COMPATIBLE_P, which
already existed (commit ea473fb2dee) and which was thought to cover
approximately the same compilers.  But the guarded code can also work
without HAVE__BUILTIN_TYPES_COMPATIBLE_P, and we now have a check for
HAVE_TYPEOF (commit 4cb824699e1), so let's fix this up to use the
correct logic.

Co-authored-by: Thomas Munro <[email protected]>
Discussion: https://www.postgresql.org/message-id/CA%2BhUKGL7trhWiJ4qxpksBztMMTWDyPnP1QN%2BLq341V7QL775DA%40mail.gmail.com

src/include/utils/relptr.h

index ea340fee6576a2b481dbac0ed636b22aa8fe139e..48e394dba71bfe9f5efdec6357f46eb81f2192a4 100644 (file)
 #define relptr_declare(type, relptrtype) \
    typedef relptr(type) relptrtype
 
-#ifdef HAVE__BUILTIN_TYPES_COMPATIBLE_P
+#ifdef HAVE_TYPEOF
 #define relptr_access(base, rp) \
    (AssertVariableIsOfTypeMacro(base, char *), \
-    (__typeof__((rp).relptr_type)) ((rp).relptr_off == 0 ? NULL : \
+    (typeof((rp).relptr_type)) ((rp).relptr_off == 0 ? NULL : \
        (base) + (rp).relptr_off - 1))
 #else
-/*
- * If we don't have __builtin_types_compatible_p, assume we might not have
- * __typeof__ either.
- */
 #define relptr_access(base, rp) \
    (AssertVariableIsOfTypeMacro(base, char *), \
     (void *) ((rp).relptr_off == 0 ? NULL : (base) + (rp).relptr_off - 1))
@@ -72,16 +68,12 @@ relptr_store_eval(char *base, char *val)
    }
 }
 
-#ifdef HAVE__BUILTIN_TYPES_COMPATIBLE_P
+#ifdef HAVE_TYPEOF
 #define relptr_store(base, rp, val) \
    (AssertVariableIsOfTypeMacro(base, char *), \
-    AssertVariableIsOfTypeMacro(val, __typeof__((rp).relptr_type)), \
+    AssertVariableIsOfTypeMacro(val, typeof((rp).relptr_type)), \
     (rp).relptr_off = relptr_store_eval((base), (char *) (val)))
 #else
-/*
- * If we don't have __builtin_types_compatible_p, assume we might not have
- * __typeof__ either.
- */
 #define relptr_store(base, rp, val) \
    (AssertVariableIsOfTypeMacro(base, char *), \
     (rp).relptr_off = relptr_store_eval((base), (char *) (val)))