My revised proposal is to remove --disable-float8-byval as a configure
option but keep it as an option in pg_config_manual.h. It is no longer
useful as a user-facing option, but as was pointed out, it is somewhat
useful for developers, so pg_config_manual.h seems like the right place.
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From 8ae788d3dd6bfea1b386955b8f161897691d6100 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Tue, 26 Nov 2019 21:15:25 +0100
Subject: [PATCH v3] Move configure --disable-float8-byval to
pg_config_manual.h
This build option was once useful to maintain compatibility with
version-0 functions, but those are no longer supported, so this option
is no longer useful for end users. We keep the option available to
developers in pg_config_manual.h so that it is easy to test the
pass-by-reference code paths without having to fire up a 32-bit
machine.
Discussion:
https://www.postgresql.org/message-id/flat/f3e1e576-2749-bbd7-2d57-3f9dcf752...@2ndquadrant.com
---
configure | 76 --------------------------------
configure.in | 23 ----------
doc/src/sgml/installation.sgml | 16 -------
src/include/c.h | 6 +++
src/include/pg_config.h.in | 8 ----
src/include/pg_config_manual.h | 13 ++++++
src/tools/msvc/Solution.pm | 15 -------
src/tools/msvc/config_default.pl | 3 --
8 files changed, 19 insertions(+), 141 deletions(-)
diff --git a/configure b/configure
index b06a95dabc..1d88983b34 100755
--- a/configure
+++ b/configure
@@ -866,7 +866,6 @@ with_system_tzdata
with_zlib
with_gnu_ld
enable_largefile
-enable_float8_byval
'
ac_precious_vars='build_alias
host_alias
@@ -1524,7 +1523,6 @@ Optional Features:
--enable-cassert enable assertion checks (for debugging)
--disable-thread-safety disable thread-safety in client libraries
--disable-largefile omit support for large files
- --disable-float8-byval disable float8 passed by value
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -16745,80 +16743,6 @@ _ACEOF
-# Decide whether float8 is passed by value.
-# Note: this setting also controls int8 and related types such as timestamp.
-# If sizeof(Datum) >= 8, this is user-selectable, enabled by default.
-# If not, trying to select it is an error.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with float8
passed by value" >&5
-$as_echo_n "checking whether to build with float8 passed by value... " >&6; }
-if test $ac_cv_sizeof_void_p -ge 8 ; then
-
-
-# Check whether --enable-float8-byval was given.
-if test "${enable_float8_byval+set}" = set; then :
- enableval=$enable_float8_byval;
- case $enableval in
- yes)
- :
- ;;
- no)
- :
- ;;
- *)
- as_fn_error $? "no argument expected for --enable-float8-byval option"
"$LINENO" 5
- ;;
- esac
-
-else
- enable_float8_byval=yes
-
-fi
-
-
-else
-
-
-# Check whether --enable-float8-byval was given.
-if test "${enable_float8_byval+set}" = set; then :
- enableval=$enable_float8_byval;
- case $enableval in
- yes)
- :
- ;;
- no)
- :
- ;;
- *)
- as_fn_error $? "no argument expected for --enable-float8-byval option"
"$LINENO" 5
- ;;
- esac
-
-else
- enable_float8_byval=no
-
-fi
-
-
- if test "$enable_float8_byval" = yes ; then
- as_fn_error $? "--enable-float8-byval is not supported on 32-bit
platforms." "$LINENO" 5
- fi
-fi
-if test "$enable_float8_byval" = yes ; then
-
-$as_echo "#define USE_FLOAT8_BYVAL 1" >>confdefs.h
-
- float8passbyval=true
-else
- float8passbyval=false
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_float8_byval" >&5
-$as_echo "$enable_float8_byval" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define FLOAT8PASSBYVAL $float8passbyval
-_ACEOF
-
-
# Determine memory alignment requirements for the basic C data types.
# The cast to long int works around a bug in the HP C Compiler,
diff --git a/configure.in b/configure.in
index 56a177ba10..a2cb20b5e3 100644
--- a/configure.in
+++ b/configure.in
@@ -1941,29 +1941,6 @@ AC_CHECK_SIZEOF([void *])
AC_CHECK_SIZEOF([size_t])
AC_CHECK_SIZEOF([long])
-# Decide whether float8 is passed by value.
-# Note: this setting also controls int8 and related types such as timestamp.
-# If sizeof(Datum) >= 8, this is user-selectable, enabled by default.
-# If not, trying to select it is an error.
-AC_MSG_CHECKING([whether to build with float8 passed by value])
-if test $ac_cv_sizeof_void_p -ge 8 ; then
- PGAC_ARG_BOOL(enable, float8-byval, yes, [disable float8 passed by value])
-else
- PGAC_ARG_BOOL(enable, float8-byval, no, [disable float8 passed by value])
- if test "$enable_float8_byval" = yes ; then
- AC_MSG_ERROR([--enable-float8-byval is not supported on 32-bit platforms.])
- fi
-fi
-if test "$enable_float8_byval" = yes ; then
- AC_DEFINE([USE_FLOAT8_BYVAL], 1,
- [Define to 1 if you want float8, int8, etc values to be passed by
value. (--enable-float8-byval)])
- float8passbyval=true
-else
- float8passbyval=false
-fi
-AC_MSG_RESULT([$enable_float8_byval])
-AC_DEFINE_UNQUOTED([FLOAT8PASSBYVAL], [$float8passbyval], [float8, int8, and
related values are passed by value if 'true', by reference if 'false'])
-
# Determine memory alignment requirements for the basic C data types.
AC_CHECK_ALIGNOF(short)
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index b4d222295e..9c10a897f1 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -1204,22 +1204,6 @@ <title>Anti-Features</title>
</listitem>
</varlistentry>
- <varlistentry>
- <term><option>--disable-float8-byval</option></term>
- <listitem>
- <para>
- Disable passing float8 values <quote>by value</quote>, causing them
- to be passed <quote>by reference</quote> instead. This option costs
- performance, but may be needed for compatibility with very old
- user-defined functions written in C.
- Note that this option affects not only float8, but also int8 and some
- related types such as timestamp.
- On 32-bit platforms, <option>--disable-float8-byval</option> is the
default
- and it is not allowed to select
<option>--enable-float8-byval</option>.
- </para>
- </listitem>
- </varlistentry>
-
<varlistentry>
<term><option>--disable-spinlocks</option></term>
<listitem>
diff --git a/src/include/c.h b/src/include/c.h
index 802a731267..00e41ac546 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -491,6 +491,12 @@ typedef signed int Offset;
typedef float float4;
typedef double float8;
+#ifdef USE_FLOAT8_BYVAL
+#define FLOAT8PASSBYVAL true
+#else
+#define FLOAT8PASSBYVAL false
+#endif
+
/*
* Oid, RegProcedure, TransactionId, SubTransactionId, MultiXactId,
* CommandId
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 6f8549bc03..c208dcdfc7 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -70,10 +70,6 @@
MSVC and with C++ compilers. */
#undef FLEXIBLE_ARRAY_MEMBER
-/* float8, int8, and related values are passed by value if 'true', by
- reference if 'false' */
-#undef FLOAT8PASSBYVAL
-
/* Define to 1 if gettimeofday() takes only 1 argument. */
#undef GETTIMEOFDAY_1ARG
@@ -898,10 +894,6 @@
/* Define to use /dev/urandom for random number generation */
#undef USE_DEV_URANDOM
-/* Define to 1 if you want float8, int8, etc values to be passed by value.
- (--enable-float8-byval) */
-#undef USE_FLOAT8_BYVAL
-
/* Define to build with ICU support. (--with-icu) */
#undef USE_ICU
diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h
index 743401cb96..61b667d166 100644
--- a/src/include/pg_config_manual.h
+++ b/src/include/pg_config_manual.h
@@ -56,6 +56,19 @@
*/
#define PARTITION_MAX_KEYS 32
+/*
+ * Decide whether built-in 8-byte types, including float8, int8, and
+ * timestamp, are passed by value. This is on by default if sizeof(Datum) >=
+ * 8 (that is, on 64-bit platforms). If sizeof(Datum) < 8 (32-bit platforms),
+ * this must be off. We keep this here as an option so that it is easy to
+ * test the pass-by-reference code paths on 64-bit platforms.
+ *
+ * Changing this requires an initdb.
+ */
+#if SIZEOF_VOID_P >= 8
+#define USE_FLOAT8_BYVAL 1
+#endif
+
/*
* When we don't have native spinlocks, we use semaphores to simulate them.
* Decreasing this value reduces consumption of OS resources; increasing it
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index e4ea62e80b..5f72530c72 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -29,12 +29,7 @@ sub _new
bless($self, $classname);
$self->DeterminePlatform();
- my $bits = $self->{platform} eq 'Win32' ? 32 : 64;
- $options->{float8byval} = ($bits == 64)
- unless exists $options->{float8byval};
- die "float8byval not permitted on 32 bit platforms"
- if $options->{float8byval} && $bits == 32;
if ($options->{xslt} && !$options->{xml})
{
die "XSLT requires XML\n";
@@ -207,16 +202,6 @@ sub GenerateFiles
print $o "#define XLOG_BLCKSZ ",
1024 * $self->{options}->{wal_blocksize}, "\n";
- if ($self->{options}->{float8byval})
- {
- print $o "#define USE_FLOAT8_BYVAL 1\n";
- print $o "#define FLOAT8PASSBYVAL true\n";
- }
- else
- {
- print $o "#define FLOAT8PASSBYVAL false\n";
- }
-
if ($self->{options}->{uuid})
{
print $o "#define HAVE_UUID_OSSP\n";
diff --git a/src/tools/msvc/config_default.pl b/src/tools/msvc/config_default.pl
index 62188c78e7..2ef2cfc4e9 100644
--- a/src/tools/msvc/config_default.pl
+++ b/src/tools/msvc/config_default.pl
@@ -5,9 +5,6 @@
our $config = {
asserts => 0, # --enable-cassert
- # float8byval=> $platformbits == 64, # --disable-float8-byval,
- # off by default on 32 bit platforms, on by default on 64 bit platforms
-
# blocksize => 8, # --with-blocksize, 8kB by default
# wal_blocksize => 8, # --with-wal-blocksize, 8kB by default
ldap => 1, # --with-ldap
base-commit: 0dc8ead46363fec6f621a12c7e1f889ba73b55a9
--
2.24.0