pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Subject: Re: Remove configure --disable-float4-byval and --disable-float8-byval
Date: Sat, 2 Nov 2019 08:39:16 +0100
Message-ID: <1c0156d2-fbbe-aa8d-e7f9-b6ac09ebf129@2ndquadrant.com> (raw)
In-Reply-To: <15316.1572528990@sss.pgh.pa.us>
References: <f3e1e576-2749-bbd7-2d57-3f9dcf75255a@2ndquadrant.com>
	<15316.1572528990@sss.pgh.pa.us>

On 2019-10-31 14:36, Tom Lane wrote:
> Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes:
>> float4 is now always pass-by-value; the pass-by-reference code path is
>> completely removed.
> 
> I think this is OK.

OK, here is a patch for just this part, and we can continue the 
discussion on the rest in the meantime.

-- 
Peter Eisentraut              http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From 117590e3e1bb74ce8bebbd4791fcfcb514e24136 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Sat, 2 Nov 2019 08:09:01 +0100
Subject: [PATCH v2] Remove configure --disable-float4-byval

This build option was only useful to maintain compatibility for
version-0 functions, but those are no longer supported, so this option
can be removed.

float4 is now always pass-by-value; the pass-by-reference code path is
completely removed.

Discussion: https://www.postgresql.org/message-id/flat/f3e1e576-2749-bbd7-2d57-3f9dcf75255a@2ndquadrant.com
---
 configure                               | 42 -------------------------
 configure.in                            | 10 ------
 doc/src/sgml/func.sgml                  |  5 ---
 doc/src/sgml/installation.sgml          | 12 -------
 src/backend/access/index/indexam.c      |  5 ---
 src/backend/access/transam/xlog.c       | 17 ----------
 src/backend/bootstrap/bootstrap.c       |  2 +-
 src/backend/catalog/genbki.pl           |  2 +-
 src/backend/commands/analyze.c          |  2 +-
 src/backend/utils/fmgr/dfmgr.c          |  9 ------
 src/backend/utils/fmgr/fmgr.c           | 19 ++---------
 src/backend/utils/misc/pg_controldata.c | 17 ++++------
 src/bin/initdb/initdb.c                 |  3 --
 src/bin/pg_controldata/pg_controldata.c |  2 --
 src/bin/pg_resetwal/pg_resetwal.c       |  3 --
 src/include/catalog/catversion.h        |  2 +-
 src/include/catalog/pg_control.h        |  4 +--
 src/include/catalog/pg_proc.dat         |  6 ++--
 src/include/catalog/pg_type.dat         |  2 +-
 src/include/fmgr.h                      |  2 --
 src/include/pg_config.h.in              |  7 -----
 src/include/postgres.h                  | 23 +-------------
 src/tools/msvc/Solution.pm              | 11 -------
 src/tools/msvc/config_default.pl        |  1 -
 24 files changed, 18 insertions(+), 190 deletions(-)

diff --git a/configure b/configure
index 6b1c779ee3..accd06c2e6 100755
--- a/configure
+++ b/configure
@@ -866,7 +866,6 @@ with_system_tzdata
 with_zlib
 with_gnu_ld
 enable_largefile
-enable_float4_byval
 enable_float8_byval
 '
       ac_precious_vars='build_alias
@@ -1525,7 +1524,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:
@@ -16801,46 +16799,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.
diff --git a/configure.in b/configure.in
index 2b9025cac3..e5ad3bf883 100644
--- a/configure.in
+++ b/configure.in
@@ -1931,16 +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.
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 28eb322f3f..8c8a568fd9 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -19964,11 +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>
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index d8494e293b..b4d222295e 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -1204,18 +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>
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..68134c5463 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -4516,7 +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 */
@@ -4720,22 +4719,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,
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/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index be684786d6..b67d68f8dd 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -365,15 +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)
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index 099ebd779b..2ce7a866c9 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -1683,7 +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.
+ * int8 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.)
  *
@@ -1703,21 +1703,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)
@@ -1727,7 +1712,7 @@ Float8GetDatum(float8 X)
 	*retval = X;
 	return PointerGetDatum(retval);
 }
-#endif
+#endif							/* USE_FLOAT8_BYVAL */
 
 
 /*-------------------------------------------------------------------------
diff --git a/src/backend/utils/misc/pg_controldata.c b/src/backend/utils/misc/pg_controldata.c
index b42921800b..4d6282a802 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[11];
+	bool		nulls[11];
 	TupleDesc	tupdesc;
 	HeapTuple	htup;
 	ControlFileData *ControlFile;
@@ -294,11 +294,9 @@ 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",
+	TupleDescInitEntry(tupdesc, (AttrNumber) 10, "float8_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) 11, "data_page_checksum_version",
 					   INT4OID, -1, 0);
 	tupdesc = BlessTupleDesc(tupdesc);
 
@@ -335,15 +333,12 @@ pg_control_init(PG_FUNCTION_ARGS)
 	values[8] = Int32GetDatum(ControlFile->loblksize);
 	nulls[8] = false;
 
-	values[9] = BoolGetDatum(ControlFile->float4ByVal);
+	values[9] = BoolGetDatum(ControlFile->float8ByVal);
 	nulls[9] = false;
 
-	values[10] = BoolGetDatum(ControlFile->float8ByVal);
+	values[10] = Int32GetDatum(ControlFile->data_checksum_version);
 	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..19e21ab491 100644
--- a/src/bin/pg_controldata/pg_controldata.c
+++ b/src/bin/pg_controldata/pg_controldata.c
@@ -327,8 +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"),
diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c
index c4ee0168a9..2e286f6339 100644
--- a/src/bin/pg_resetwal/pg_resetwal.c
+++ b/src/bin/pg_resetwal/pg_resetwal.c
@@ -722,7 +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;
 
 	/*
@@ -801,8 +800,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"),
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 1f6de76e9c..1c75b1b4b5 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	201911021
 
 #endif
diff --git a/src/include/catalog/pg_control.h b/src/include/catalog/pg_control.h
index ff98d9e91a..4e5077078d 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,8 +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 */
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 58ea5b982b..970b08e4f0 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,bool,int4}',
+  proargmodes => '{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,float8_pass_by_value,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..724ee73bde 100644
--- a/src/include/fmgr.h
+++ b/src/include/fmgr.h
@@ -446,7 +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;
 
@@ -458,7 +457,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..6d363a157e 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -70,9 +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
@@ -898,10 +895,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
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..0aba79843c 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -31,8 +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"
@@ -209,15 +207,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";
diff --git a/src/tools/msvc/config_default.pl b/src/tools/msvc/config_default.pl
index 043df4c5e8..62188c78e7 100644
--- a/src/tools/msvc/config_default.pl
+++ b/src/tools/msvc/config_default.pl
@@ -4,7 +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

base-commit: dc816e5815913e2b2ae2327a4d3e4d4416ed6898
-- 
2.23.0



Attachments:

  [text/plain] v2-0001-Remove-configure-disable-float4-byval.patch (23.5K, ../1c0156d2-fbbe-aa8d-e7f9-b6ac09ebf129@2ndquadrant.com/2-v2-0001-Remove-configure-disable-float4-byval.patch)
  download | inline diff:
From 117590e3e1bb74ce8bebbd4791fcfcb514e24136 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Sat, 2 Nov 2019 08:09:01 +0100
Subject: [PATCH v2] Remove configure --disable-float4-byval

This build option was only useful to maintain compatibility for
version-0 functions, but those are no longer supported, so this option
can be removed.

float4 is now always pass-by-value; the pass-by-reference code path is
completely removed.

Discussion: https://www.postgresql.org/message-id/flat/f3e1e576-2749-bbd7-2d57-3f9dcf75255a@2ndquadrant.com
---
 configure                               | 42 -------------------------
 configure.in                            | 10 ------
 doc/src/sgml/func.sgml                  |  5 ---
 doc/src/sgml/installation.sgml          | 12 -------
 src/backend/access/index/indexam.c      |  5 ---
 src/backend/access/transam/xlog.c       | 17 ----------
 src/backend/bootstrap/bootstrap.c       |  2 +-
 src/backend/catalog/genbki.pl           |  2 +-
 src/backend/commands/analyze.c          |  2 +-
 src/backend/utils/fmgr/dfmgr.c          |  9 ------
 src/backend/utils/fmgr/fmgr.c           | 19 ++---------
 src/backend/utils/misc/pg_controldata.c | 17 ++++------
 src/bin/initdb/initdb.c                 |  3 --
 src/bin/pg_controldata/pg_controldata.c |  2 --
 src/bin/pg_resetwal/pg_resetwal.c       |  3 --
 src/include/catalog/catversion.h        |  2 +-
 src/include/catalog/pg_control.h        |  4 +--
 src/include/catalog/pg_proc.dat         |  6 ++--
 src/include/catalog/pg_type.dat         |  2 +-
 src/include/fmgr.h                      |  2 --
 src/include/pg_config.h.in              |  7 -----
 src/include/postgres.h                  | 23 +-------------
 src/tools/msvc/Solution.pm              | 11 -------
 src/tools/msvc/config_default.pl        |  1 -
 24 files changed, 18 insertions(+), 190 deletions(-)

diff --git a/configure b/configure
index 6b1c779ee3..accd06c2e6 100755
--- a/configure
+++ b/configure
@@ -866,7 +866,6 @@ with_system_tzdata
 with_zlib
 with_gnu_ld
 enable_largefile
-enable_float4_byval
 enable_float8_byval
 '
       ac_precious_vars='build_alias
@@ -1525,7 +1524,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:
@@ -16801,46 +16799,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.
diff --git a/configure.in b/configure.in
index 2b9025cac3..e5ad3bf883 100644
--- a/configure.in
+++ b/configure.in
@@ -1931,16 +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.
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 28eb322f3f..8c8a568fd9 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -19964,11 +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>
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index d8494e293b..b4d222295e 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -1204,18 +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>
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..68134c5463 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -4516,7 +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 */
@@ -4720,22 +4719,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,
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/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index be684786d6..b67d68f8dd 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -365,15 +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)
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index 099ebd779b..2ce7a866c9 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -1683,7 +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.
+ * int8 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.)
  *
@@ -1703,21 +1703,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)
@@ -1727,7 +1712,7 @@ Float8GetDatum(float8 X)
 	*retval = X;
 	return PointerGetDatum(retval);
 }
-#endif
+#endif							/* USE_FLOAT8_BYVAL */
 
 
 /*-------------------------------------------------------------------------
diff --git a/src/backend/utils/misc/pg_controldata.c b/src/backend/utils/misc/pg_controldata.c
index b42921800b..4d6282a802 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[11];
+	bool		nulls[11];
 	TupleDesc	tupdesc;
 	HeapTuple	htup;
 	ControlFileData *ControlFile;
@@ -294,11 +294,9 @@ 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",
+	TupleDescInitEntry(tupdesc, (AttrNumber) 10, "float8_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) 11, "data_page_checksum_version",
 					   INT4OID, -1, 0);
 	tupdesc = BlessTupleDesc(tupdesc);
 
@@ -335,15 +333,12 @@ pg_control_init(PG_FUNCTION_ARGS)
 	values[8] = Int32GetDatum(ControlFile->loblksize);
 	nulls[8] = false;
 
-	values[9] = BoolGetDatum(ControlFile->float4ByVal);
+	values[9] = BoolGetDatum(ControlFile->float8ByVal);
 	nulls[9] = false;
 
-	values[10] = BoolGetDatum(ControlFile->float8ByVal);
+	values[10] = Int32GetDatum(ControlFile->data_checksum_version);
 	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..19e21ab491 100644
--- a/src/bin/pg_controldata/pg_controldata.c
+++ b/src/bin/pg_controldata/pg_controldata.c
@@ -327,8 +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"),
diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c
index c4ee0168a9..2e286f6339 100644
--- a/src/bin/pg_resetwal/pg_resetwal.c
+++ b/src/bin/pg_resetwal/pg_resetwal.c
@@ -722,7 +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;
 
 	/*
@@ -801,8 +800,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"),
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 1f6de76e9c..1c75b1b4b5 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	201911021
 
 #endif
diff --git a/src/include/catalog/pg_control.h b/src/include/catalog/pg_control.h
index ff98d9e91a..4e5077078d 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,8 +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 */
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 58ea5b982b..970b08e4f0 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,bool,int4}',
+  proargmodes => '{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,float8_pass_by_value,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..724ee73bde 100644
--- a/src/include/fmgr.h
+++ b/src/include/fmgr.h
@@ -446,7 +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;
 
@@ -458,7 +457,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..6d363a157e 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -70,9 +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
@@ -898,10 +895,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
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..0aba79843c 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -31,8 +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"
@@ -209,15 +207,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";
diff --git a/src/tools/msvc/config_default.pl b/src/tools/msvc/config_default.pl
index 043df4c5e8..62188c78e7 100644
--- a/src/tools/msvc/config_default.pl
+++ b/src/tools/msvc/config_default.pl
@@ -4,7 +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

base-commit: dc816e5815913e2b2ae2327a4d3e4d4416ed6898
-- 
2.23.0



view thread (26+ messages)  latest in thread

Message-ID: <1c0156d2-fbbe-aa8d-e7f9-b6ac09ebf129@2ndquadrant.com>
Permalink:  ../1c0156d2-fbbe-aa8d-e7f9-b6ac09ebf129@2ndquadrant.com/
Also on:    postgresql.org/message-id/1c0156d2-fbbe-aa8d-e7f9-b6ac09ebf129@2ndquadrant.com

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: peter.eisentraut@2ndquadrant.com, tgl@sss.pgh.pa.us
  Subject: Re: Remove configure --disable-float4-byval and --disable-float8-byval
  In-Reply-To: <1c0156d2-fbbe-aa8d-e7f9-b6ac09ebf129@2ndquadrant.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox