0001-Remove-configure-disable-float4-byval-and-disable-fl.patch
text/plain
Filename: 0001-Remove-configure-disable-float4-byval-and-disable-fl.patch
Type: text/plain
Part: 0
Patch
Format: format-patch
Series: patch 0001
Subject: Remove configure --disable-float4-byval and --disable-float8-byval
| File | + | − |
|---|---|---|
| configure | 0 | 118 |
| configure.in | 0 | 33 |
| doc/src/sgml/func.sgml | 0 | 10 |
| doc/src/sgml/installation.sgml | 0 | 28 |
| src/backend/access/index/indexam.c | 0 | 5 |
| src/backend/access/transam/xlog.c | 0 | 35 |
| src/backend/bootstrap/bootstrap.c | 1 | 1 |
| src/backend/catalog/genbki.pl | 1 | 1 |
| src/backend/commands/analyze.c | 1 | 1 |
| src/backend/utils/adt/numeric.c | 3 | 2 |
| src/backend/utils/fmgr/dfmgr.c | 0 | 18 |
| src/backend/utils/fmgr/fmgr.c | 1 | 22 |
| src/backend/utils/misc/pg_controldata.c | 4 | 14 |
| src/bin/initdb/initdb.c | 0 | 3 |
| src/bin/pg_controldata/pg_controldata.c | 0 | 4 |
| src/bin/pg_resetwal/pg_resetwal.c | 0 | 6 |
| src/bin/pg_upgrade/controldata.c | 7 | 0 |
| src/include/catalog/catversion.h | 1 | 1 |
| src/include/catalog/pg_control.h | 1 | 5 |
| src/include/catalog/pg_proc.dat | 3 | 3 |
| src/include/catalog/pg_type.dat | 1 | 1 |
| src/include/c.h | 15 | 0 |
| src/include/fmgr.h | 0 | 4 |
| src/include/pg_config.h.in | 0 | 15 |
| src/include/postgres.h | 1 | 22 |
| src/tools/msvc/config_default.pl | 0 | 5 |
| src/tools/msvc/Solution.pm | 0 | 25 |
From e009755a160d3d67900c80c9bc17276e27f79baa Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Thu, 31 Oct 2019 09:21:38 +0100
Subject: [PATCH 1/3] Remove configure --disable-float4-byval and
--disable-float8-byval
These build options were only useful to maintain compatibility for version-0
functions, but those are no longer supported, so these options can be
removed.
float4 is now always pass-by-value; the pass-by-reference
code path is completely removed.
float8 and related types are now hardcoded to pass-by-value or
pass-by-reference depending on whether the build is 64- or 32-bit, as
was previously also the default.
---
configure | 118 ------------------------
configure.in | 33 -------
doc/src/sgml/func.sgml | 10 --
doc/src/sgml/installation.sgml | 28 ------
src/backend/access/index/indexam.c | 5 -
src/backend/access/transam/xlog.c | 35 -------
src/backend/bootstrap/bootstrap.c | 2 +-
src/backend/catalog/genbki.pl | 2 +-
src/backend/commands/analyze.c | 2 +-
src/backend/utils/adt/numeric.c | 5 +-
src/backend/utils/fmgr/dfmgr.c | 18 ----
src/backend/utils/fmgr/fmgr.c | 23 +----
src/backend/utils/misc/pg_controldata.c | 18 +---
src/bin/initdb/initdb.c | 3 -
src/bin/pg_controldata/pg_controldata.c | 4 -
src/bin/pg_resetwal/pg_resetwal.c | 6 --
src/bin/pg_upgrade/controldata.c | 7 ++
src/include/c.h | 15 +++
src/include/catalog/catversion.h | 2 +-
src/include/catalog/pg_control.h | 6 +-
src/include/catalog/pg_proc.dat | 6 +-
src/include/catalog/pg_type.dat | 2 +-
src/include/fmgr.h | 4 -
src/include/pg_config.h.in | 15 ---
src/include/postgres.h | 23 +----
src/tools/msvc/Solution.pm | 25 -----
src/tools/msvc/config_default.pl | 5 -
27 files changed, 40 insertions(+), 382 deletions(-)
diff --git a/configure b/configure
index 6b1c779ee3..b38ad1526d 100755
--- a/configure
+++ b/configure
@@ -866,8 +866,6 @@ with_system_tzdata
with_zlib
with_gnu_ld
enable_largefile
-enable_float4_byval
-enable_float8_byval
'
ac_precious_vars='build_alias
host_alias
@@ -1525,8 +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-float4-byval disable float4 passed by value
- --disable-float8-byval disable float8 passed by value
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -16801,120 +16797,6 @@ _ACEOF
-# Decide whether float4 is passed by value: user-selectable, enabled by default
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with float4 passed by value" >&5
-$as_echo_n "checking whether to build with float4 passed by value... " >&6; }
-
-
-# Check whether --enable-float4-byval was given.
-if test "${enable_float4_byval+set}" = set; then :
- enableval=$enable_float4_byval;
- case $enableval in
- yes)
-
-$as_echo "#define USE_FLOAT4_BYVAL 1" >>confdefs.h
-
- float4passbyval=true
- ;;
- no)
- float4passbyval=false
- ;;
- *)
- as_fn_error $? "no argument expected for --enable-float4-byval option" "$LINENO" 5
- ;;
- esac
-
-else
- enable_float4_byval=yes
-
-$as_echo "#define USE_FLOAT4_BYVAL 1" >>confdefs.h
-
- float4passbyval=true
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_float4_byval" >&5
-$as_echo "$enable_float4_byval" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define FLOAT4PASSBYVAL $float4passbyval
-_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 2b9025cac3..73d55ae48d 100644
--- a/configure.in
+++ b/configure.in
@@ -1931,39 +1931,6 @@ AC_CHECK_SIZEOF([void *])
AC_CHECK_SIZEOF([size_t])
AC_CHECK_SIZEOF([long])
-# Decide whether float4 is passed by value: user-selectable, enabled by default
-AC_MSG_CHECKING([whether to build with float4 passed by value])
-PGAC_ARG_BOOL(enable, float4-byval, yes, [disable float4 passed by value],
- [AC_DEFINE([USE_FLOAT4_BYVAL], 1,
- [Define to 1 if you want float4 values to be passed by value. (--enable-float4-byval)])
- float4passbyval=true],
- [float4passbyval=false])
-AC_MSG_RESULT([$enable_float4_byval])
-AC_DEFINE_UNQUOTED([FLOAT4PASSBYVAL], [$float4passbyval], [float4 values are passed by value if 'true', by reference if 'false'])
-
-# 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/func.sgml b/doc/src/sgml/func.sgml
index 28eb322f3f..e4ae12f874 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -19964,16 +19964,6 @@ <title><function>pg_control_init</function> Columns</title>
<entry><type>integer</type></entry>
</row>
- <row>
- <entry><literal>float4_pass_by_value</literal></entry>
- <entry><type>boolean</type></entry>
- </row>
-
- <row>
- <entry><literal>float8_pass_by_value</literal></entry>
- <entry><type>boolean</type></entry>
- </row>
-
<row>
<entry><literal>data_page_checksum_version</literal></entry>
<entry><type>integer</type></entry>
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index d8494e293b..9c10a897f1 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -1204,34 +1204,6 @@ <title>Anti-Features</title>
</listitem>
</varlistentry>
- <varlistentry>
- <term><option>--disable-float4-byval</option></term>
- <listitem>
- <para>
- Disable passing float4 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.
- </para>
- </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/backend/access/index/indexam.c b/src/backend/access/index/indexam.c
index 9dfa0ddfbb..4af418287d 100644
--- a/src/backend/access/index/indexam.c
+++ b/src/backend/access/index/indexam.c
@@ -879,11 +879,6 @@ index_store_float8_orderby_distances(IndexScanDesc scan, Oid *orderByTypes,
else if (orderByTypes[i] == FLOAT4OID)
{
/* convert distance function's result to ORDER BY type */
-#ifndef USE_FLOAT4_BYVAL
- /* must free any old value to avoid memory leakage */
- if (!scan->xs_orderbynulls[i])
- pfree(DatumGetPointer(scan->xs_orderbyvals[i]));
-#endif
if (distances && !distances[i].isnull)
{
scan->xs_orderbyvals[i] = Float4GetDatum((float4) distances[i].value);
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 2e3cc51006..27f2c6bbe2 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -4516,9 +4516,6 @@ WriteControlFile(void)
ControlFile->toast_max_chunk_size = TOAST_MAX_CHUNK_SIZE;
ControlFile->loblksize = LOBLKSIZE;
- ControlFile->float4ByVal = FLOAT4PASSBYVAL;
- ControlFile->float8ByVal = FLOAT8PASSBYVAL;
-
/* Contents are protected with a CRC */
INIT_CRC32C(ControlFile->crc);
COMP_CRC32C(ControlFile->crc,
@@ -4720,38 +4717,6 @@ ReadControlFile(void)
ControlFile->loblksize, (int) LOBLKSIZE),
errhint("It looks like you need to recompile or initdb.")));
-#ifdef USE_FLOAT4_BYVAL
- if (ControlFile->float4ByVal != true)
- ereport(FATAL,
- (errmsg("database files are incompatible with server"),
- errdetail("The database cluster was initialized without USE_FLOAT4_BYVAL"
- " but the server was compiled with USE_FLOAT4_BYVAL."),
- errhint("It looks like you need to recompile or initdb.")));
-#else
- if (ControlFile->float4ByVal != false)
- ereport(FATAL,
- (errmsg("database files are incompatible with server"),
- errdetail("The database cluster was initialized with USE_FLOAT4_BYVAL"
- " but the server was compiled without USE_FLOAT4_BYVAL."),
- errhint("It looks like you need to recompile or initdb.")));
-#endif
-
-#ifdef USE_FLOAT8_BYVAL
- if (ControlFile->float8ByVal != true)
- ereport(FATAL,
- (errmsg("database files are incompatible with server"),
- errdetail("The database cluster was initialized without USE_FLOAT8_BYVAL"
- " but the server was compiled with USE_FLOAT8_BYVAL."),
- errhint("It looks like you need to recompile or initdb.")));
-#else
- if (ControlFile->float8ByVal != false)
- ereport(FATAL,
- (errmsg("database files are incompatible with server"),
- errdetail("The database cluster was initialized with USE_FLOAT8_BYVAL"
- " but the server was compiled without USE_FLOAT8_BYVAL."),
- errhint("It looks like you need to recompile or initdb.")));
-#endif
-
wal_segment_size = ControlFile->xlog_seg_size;
if (!IsValidWalSegSize(wal_segment_size))
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index 9238fbe98d..8ea033610d 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -111,7 +111,7 @@ static const struct typinfo TypInfo[] = {
F_INT2IN, F_INT2OUT},
{"int4", INT4OID, 0, 4, true, 'i', 'p', InvalidOid,
F_INT4IN, F_INT4OUT},
- {"float4", FLOAT4OID, 0, 4, FLOAT4PASSBYVAL, 'i', 'p', InvalidOid,
+ {"float4", FLOAT4OID, 0, 4, true, 'i', 'p', InvalidOid,
F_FLOAT4IN, F_FLOAT4OUT},
{"name", NAMEOID, CHAROID, NAMEDATALEN, false, 'c', 'p', C_COLLATION_OID,
F_NAMEIN, F_NAMEOUT},
diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl
index 201d12d358..6eff045bd9 100644
--- a/src/backend/catalog/genbki.pl
+++ b/src/backend/catalog/genbki.pl
@@ -890,7 +890,7 @@ sub morph_row_for_schemapg
}
# Expand booleans from 'f'/'t' to 'false'/'true'.
- # Some values might be other macros (eg FLOAT4PASSBYVAL),
+ # Some values might be other macros (eg FLOAT8PASSBYVAL),
# don't change.
elsif ($atttype eq 'bool')
{
diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c
index 7accb950eb..71372ceb16 100644
--- a/src/backend/commands/analyze.c
+++ b/src/backend/commands/analyze.c
@@ -1496,7 +1496,7 @@ update_attstats(Oid relid, bool inh, int natts, VacAttrStats **vacattrstats)
/* XXX knows more than it should about type float4: */
arry = construct_array(numdatums, nnum,
FLOAT4OID,
- sizeof(float4), FLOAT4PASSBYVAL, 'i');
+ sizeof(float4), true, 'i');
values[i++] = PointerGetDatum(arry); /* stanumbersN */
}
else
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index a00db3ce7a..21cc9a8109 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -351,8 +351,9 @@ typedef struct NumericSumAccum
/*
* We define our own macros for packing and unpacking abbreviated-key
* representations for numeric values in order to avoid depending on
- * USE_FLOAT8_BYVAL. The type of abbreviation we use is based only on
- * the size of a datum, not the argument-passing convention for float8.
+ * USE_FLOAT8_BYVAL, which was previously build-time configurable. The type
+ * of abbreviation we use is based only on the size of a datum, not the
+ * argument-passing convention for float8.
*/
#define NUMERIC_ABBREV_BITS (SIZEOF_DATUM * BITS_PER_BYTE)
#if SIZEOF_DATUM == 8
diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index be684786d6..589371942f 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -365,24 +365,6 @@ incompatible_module_error(const char *libname,
magic_data.namedatalen,
module_magic_data->namedatalen);
}
- if (module_magic_data->float4byval != magic_data.float4byval)
- {
- if (details.len)
- appendStringInfoChar(&details, '\n');
- appendStringInfo(&details,
- _("Server has FLOAT4PASSBYVAL = %s, library has %s."),
- magic_data.float4byval ? "true" : "false",
- module_magic_data->float4byval ? "true" : "false");
- }
- if (module_magic_data->float8byval != magic_data.float8byval)
- {
- if (details.len)
- appendStringInfoChar(&details, '\n');
- appendStringInfo(&details,
- _("Server has FLOAT8PASSBYVAL = %s, library has %s."),
- magic_data.float8byval ? "true" : "false",
- module_magic_data->float8byval ? "true" : "false");
- }
if (details.len == 0)
appendStringInfoString(&details,
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index 099ebd779b..c2eaa6178d 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -1683,13 +1683,7 @@ OidSendFunctionCall(Oid functionId, Datum val)
/*-------------------------------------------------------------------------
* Support routines for standard maybe-pass-by-reference datatypes
*
- * int8, float4, and float8 can be passed by value if Datum is wide enough.
- * (For backwards-compatibility reasons, we allow pass-by-ref to be chosen
- * at compile time even if pass-by-val is possible.)
- *
- * Note: there is only one switch controlling the pass-by-value option for
- * both int8 and float8; this is to avoid making things unduly complicated
- * for the timestamp types, which might have either representation.
+ * int8 and float8 can be passed by value if Datum is wide enough.
*-------------------------------------------------------------------------
*/
@@ -1703,21 +1697,6 @@ Int64GetDatum(int64 X)
*retval = X;
return PointerGetDatum(retval);
}
-#endif /* USE_FLOAT8_BYVAL */
-
-#ifndef USE_FLOAT4_BYVAL
-
-Datum
-Float4GetDatum(float4 X)
-{
- float4 *retval = (float4 *) palloc(sizeof(float4));
-
- *retval = X;
- return PointerGetDatum(retval);
-}
-#endif
-
-#ifndef USE_FLOAT8_BYVAL
Datum
Float8GetDatum(float8 X)
diff --git a/src/backend/utils/misc/pg_controldata.c b/src/backend/utils/misc/pg_controldata.c
index b42921800b..330c210407 100644
--- a/src/backend/utils/misc/pg_controldata.c
+++ b/src/backend/utils/misc/pg_controldata.c
@@ -264,8 +264,8 @@ pg_control_recovery(PG_FUNCTION_ARGS)
Datum
pg_control_init(PG_FUNCTION_ARGS)
{
- Datum values[12];
- bool nulls[12];
+ Datum values[10];
+ bool nulls[10];
TupleDesc tupdesc;
HeapTuple htup;
ControlFileData *ControlFile;
@@ -294,11 +294,7 @@ pg_control_init(PG_FUNCTION_ARGS)
INT4OID, -1, 0);
TupleDescInitEntry(tupdesc, (AttrNumber) 9, "large_object_chunk_size",
INT4OID, -1, 0);
- TupleDescInitEntry(tupdesc, (AttrNumber) 10, "float4_pass_by_value",
- BOOLOID, -1, 0);
- TupleDescInitEntry(tupdesc, (AttrNumber) 11, "float8_pass_by_value",
- BOOLOID, -1, 0);
- TupleDescInitEntry(tupdesc, (AttrNumber) 12, "data_page_checksum_version",
+ TupleDescInitEntry(tupdesc, (AttrNumber) 10, "data_page_checksum_version",
INT4OID, -1, 0);
tupdesc = BlessTupleDesc(tupdesc);
@@ -335,15 +331,9 @@ pg_control_init(PG_FUNCTION_ARGS)
values[8] = Int32GetDatum(ControlFile->loblksize);
nulls[8] = false;
- values[9] = BoolGetDatum(ControlFile->float4ByVal);
+ values[9] = Int32GetDatum(ControlFile->data_checksum_version);
nulls[9] = false;
- values[10] = BoolGetDatum(ControlFile->float8ByVal);
- nulls[10] = false;
-
- values[11] = Int32GetDatum(ControlFile->data_checksum_version);
- nulls[11] = false;
-
htup = heap_form_tuple(tupdesc, values, nulls);
PG_RETURN_DATUM(HeapTupleGetDatum(htup));
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index 88a261d9bd..1f6d8939be 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -1399,9 +1399,6 @@ bootstrap_template1(void)
bki_lines = replace_token(bki_lines, "ALIGNOF_POINTER",
(sizeof(Pointer) == 4) ? "i" : "d");
- bki_lines = replace_token(bki_lines, "FLOAT4PASSBYVAL",
- FLOAT4PASSBYVAL ? "true" : "false");
-
bki_lines = replace_token(bki_lines, "FLOAT8PASSBYVAL",
FLOAT8PASSBYVAL ? "true" : "false");
diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c
index b14767f8b6..a2611c253c 100644
--- a/src/bin/pg_controldata/pg_controldata.c
+++ b/src/bin/pg_controldata/pg_controldata.c
@@ -327,10 +327,6 @@ main(int argc, char *argv[])
/* This is no longer configurable, but users may still expect to see it: */
printf(_("Date/time type storage: %s\n"),
_("64-bit integers"));
- printf(_("Float4 argument passing: %s\n"),
- (ControlFile->float4ByVal ? _("by value") : _("by reference")));
- printf(_("Float8 argument passing: %s\n"),
- (ControlFile->float8ByVal ? _("by value") : _("by reference")));
printf(_("Data page checksum version: %u\n"),
ControlFile->data_checksum_version);
printf(_("Mock authentication nonce: %s\n"),
diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c
index c4ee0168a9..201fcde2cd 100644
--- a/src/bin/pg_resetwal/pg_resetwal.c
+++ b/src/bin/pg_resetwal/pg_resetwal.c
@@ -722,8 +722,6 @@ GuessControlValues(void)
ControlFile.indexMaxKeys = INDEX_MAX_KEYS;
ControlFile.toast_max_chunk_size = TOAST_MAX_CHUNK_SIZE;
ControlFile.loblksize = LOBLKSIZE;
- ControlFile.float4ByVal = FLOAT4PASSBYVAL;
- ControlFile.float8ByVal = FLOAT8PASSBYVAL;
/*
* XXX eventually, should try to grovel through old XLOG to develop more
@@ -801,10 +799,6 @@ PrintControlValues(bool guessed)
/* This is no longer configurable, but users may still expect to see it: */
printf(_("Date/time type storage: %s\n"),
_("64-bit integers"));
- printf(_("Float4 argument passing: %s\n"),
- (ControlFile.float4ByVal ? _("by value") : _("by reference")));
- printf(_("Float8 argument passing: %s\n"),
- (ControlFile.float8ByVal ? _("by value") : _("by reference")));
printf(_("Data page checksum version: %u\n"),
ControlFile.data_checksum_version);
}
diff --git a/src/bin/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c
index 93f3c34b74..85e22283a6 100644
--- a/src/bin/pg_upgrade/controldata.c
+++ b/src/bin/pg_upgrade/controldata.c
@@ -202,6 +202,13 @@ get_control_data(ClusterInfo *cluster, bool live_check)
got_data_checksum_version = true;
}
+ /* This is no longer configurable. */
+ if (GET_MAJOR_VERSION(cluster->major_version) >= 1300)
+ {
+ cluster->controldata.float8_pass_by_value = FLOAT8PASSBYVAL;
+ got_float8_pass_by_value = true;
+ }
+
/* we have the result of cmd in "output". so parse it line by line now */
while (fgets(bufin, sizeof(bufin), output))
{
diff --git a/src/include/c.h b/src/include/c.h
index d752cc07dc..ab9cb73a4c 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -490,6 +490,21 @@ typedef signed int Offset;
typedef float float4;
typedef double float8;
+/*
+ * Decide whether 8-byte types are passed by value. This controls the titular
+ * float8 but also int8 and related types such as timestamp.
+ *
+ * This is defined here instead of, say, postgres.h, so that initdb.c can see
+ * it.
+ */
+#if SIZEOF_VOID_P >= 8
+#define FLOAT8PASSBYVAL true
+#define USE_FLOAT8_BYVAL 1
+#else
+#define FLOAT8PASSBYVAL false
+#undef USE_FLOAT8_BYVAL
+#endif
+
/*
* Oid, RegProcedure, TransactionId, SubTransactionId, MultiXactId,
* CommandId
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 1f6de76e9c..37c52ddd38 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -53,6 +53,6 @@
*/
/* yyyymmddN */
-#define CATALOG_VERSION_NO 201910251
+#define CATALOG_VERSION_NO 201910311
#endif
diff --git a/src/include/catalog/pg_control.h b/src/include/catalog/pg_control.h
index ff98d9e91a..19208aefd8 100644
--- a/src/include/catalog/pg_control.h
+++ b/src/include/catalog/pg_control.h
@@ -22,7 +22,7 @@
/* Version identifier for this pg_control format */
-#define PG_CONTROL_VERSION 1201
+#define PG_CONTROL_VERSION 1202
/* Nonce key length, see below */
#define MOCK_AUTH_NONCE_LEN 32
@@ -214,10 +214,6 @@ typedef struct ControlFileData
uint32 toast_max_chunk_size; /* chunk size in TOAST tables */
uint32 loblksize; /* chunk size in pg_largeobject */
- /* flags indicating pass-by-value status of various types */
- bool float4ByVal; /* float4 pass-by-value? */
- bool float8ByVal; /* float8, int8, etc pass-by-value? */
-
/* Are data pages protected by checksums? Zero if no checksum version */
uint32 data_checksum_version;
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 58ea5b982b..4d4f119268 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -10660,9 +10660,9 @@
descr => 'pg_controldata init state information as a function',
proname => 'pg_control_init', provolatile => 'v', prorettype => 'record',
proargtypes => '',
- proallargtypes => '{int4,int4,int4,int4,int4,int4,int4,int4,int4,bool,bool,int4}',
- proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o}',
- proargnames => '{max_data_alignment,database_block_size,blocks_per_segment,wal_block_size,bytes_per_wal_segment,max_identifier_length,max_index_columns,max_toast_chunk_size,large_object_chunk_size,float4_pass_by_value,float8_pass_by_value,data_page_checksum_version}',
+ proallargtypes => '{int4,int4,int4,int4,int4,int4,int4,int4,int4,int4}',
+ proargmodes => '{o,o,o,o,o,o,o,o,o,o}',
+ proargnames => '{max_data_alignment,database_block_size,blocks_per_segment,wal_block_size,bytes_per_wal_segment,max_identifier_length,max_index_columns,max_toast_chunk_size,large_object_chunk_size,data_page_checksum_version}',
prosrc => 'pg_control_init' },
# collation management functions
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index be49e00114..d9b35af914 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -215,7 +215,7 @@
{ oid => '700', array_type_oid => '1021',
descr => 'single-precision floating point number, 4-byte storage',
- typname => 'float4', typlen => '4', typbyval => 'FLOAT4PASSBYVAL',
+ typname => 'float4', typlen => '4', typbyval => 't',
typcategory => 'N', typinput => 'float4in', typoutput => 'float4out',
typreceive => 'float4recv', typsend => 'float4send', typalign => 'i' },
{ oid => '701', array_type_oid => '1022',
diff --git a/src/include/fmgr.h b/src/include/fmgr.h
index 29ae4674cc..838d43875a 100644
--- a/src/include/fmgr.h
+++ b/src/include/fmgr.h
@@ -446,8 +446,6 @@ typedef struct
int funcmaxargs; /* FUNC_MAX_ARGS */
int indexmaxkeys; /* INDEX_MAX_KEYS */
int namedatalen; /* NAMEDATALEN */
- int float4byval; /* FLOAT4PASSBYVAL */
- int float8byval; /* FLOAT8PASSBYVAL */
} Pg_magic_struct;
/* The actual data block contents */
@@ -458,8 +456,6 @@ typedef struct
FUNC_MAX_ARGS, \
INDEX_MAX_KEYS, \
NAMEDATALEN, \
- FLOAT4PASSBYVAL, \
- FLOAT8PASSBYVAL \
}
/*
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 939245db39..97552d63d0 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -70,13 +70,6 @@
MSVC and with C++ compilers. */
#undef FLEXIBLE_ARRAY_MEMBER
-/* float4 values are passed by value if 'true', by reference if 'false' */
-#undef FLOAT4PASSBYVAL
-
-/* 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,14 +891,6 @@
/* Define to use /dev/urandom for random number generation */
#undef USE_DEV_URANDOM
-/* Define to 1 if you want float4 values to be passed by value.
- (--enable-float4-byval) */
-#undef USE_FLOAT4_BYVAL
-
-/* 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/postgres.h b/src/include/postgres.h
index 057a3413ac..f5b7c52f8a 100644
--- a/src/include/postgres.h
+++ b/src/include/postgres.h
@@ -659,11 +659,7 @@ extern Datum Int64GetDatum(int64 X);
/*
* DatumGetFloat4
* Returns 4-byte floating point value of a datum.
- *
- * Note: this macro hides whether float4 is pass by value or by reference.
*/
-
-#ifdef USE_FLOAT4_BYVAL
static inline float4
DatumGetFloat4(Datum X)
{
@@ -676,18 +672,11 @@ DatumGetFloat4(Datum X)
myunion.value = DatumGetInt32(X);
return myunion.retval;
}
-#else
-#define DatumGetFloat4(X) (* ((float4 *) DatumGetPointer(X)))
-#endif
/*
* Float4GetDatum
* Returns datum representation for a 4-byte floating point number.
- *
- * Note: if float4 is pass by reference, this function returns a reference
- * to palloc'd space.
*/
-#ifdef USE_FLOAT4_BYVAL
static inline Datum
Float4GetDatum(float4 X)
{
@@ -700,9 +689,6 @@ Float4GetDatum(float4 X)
myunion.value = X;
return Int32GetDatum(myunion.retval);
}
-#else
-extern Datum Float4GetDatum(float4 X);
-#endif
/*
* DatumGetFloat8
@@ -757,10 +743,9 @@ extern Datum Float8GetDatum(float8 X);
/*
* Int64GetDatumFast
* Float8GetDatumFast
- * Float4GetDatumFast
*
* These macros are intended to allow writing code that does not depend on
- * whether int64, float8, float4 are pass-by-reference types, while not
+ * whether int64 and float8 are pass-by-reference types, while not
* sacrificing performance when they are. The argument must be a variable
* that will exist and have the same value for as long as the Datum is needed.
* In the pass-by-ref case, the address of the variable is taken to use as
@@ -776,10 +761,4 @@ extern Datum Float8GetDatum(float8 X);
#define Float8GetDatumFast(X) PointerGetDatum(&(X))
#endif
-#ifdef USE_FLOAT4_BYVAL
-#define Float4GetDatumFast(X) Float4GetDatum(X)
-#else
-#define Float4GetDatumFast(X) PointerGetDatum(&(X))
-#endif
-
#endif /* POSTGRES_H */
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index a6958273ac..2423267b54 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -31,12 +31,6 @@ sub _new
$self->DeterminePlatform();
my $bits = $self->{platform} eq 'Win32' ? 32 : 64;
- $options->{float4byval} = 1
- unless exists $options->{float4byval};
- $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";
@@ -209,25 +203,6 @@ sub GenerateFiles
print $o "#define XLOG_BLCKSZ ",
1024 * $self->{options}->{wal_blocksize}, "\n";
- if ($self->{options}->{float4byval})
- {
- print $o "#define USE_FLOAT4_BYVAL 1\n";
- print $o "#define FLOAT4PASSBYVAL true\n";
- }
- else
- {
- print $o "#define FLOAT4PASSBYVAL false\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 043df4c5e8..d5e010b18a 100644
--- a/src/tools/msvc/config_default.pl
+++ b/src/tools/msvc/config_default.pl
@@ -4,11 +4,6 @@
our $config = {
asserts => 0, # --enable-cassert
- # float4byval=>1, # --disable-float4-byval, on by default
-
- # 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: 73025140885c889410b9bfc4a30a3866396fc5db
--
2.23.0