diff --git a/src/backend/port/Makefile b/src/backend/port/Makefile
index 8ebb6d5703764e5e6ab953249bcdbb5b16c50b39..bfb19add88fbde93f6f95eb6fe7db177497cdf7c 100644
--- a/src/backend/port/Makefile
+++ b/src/backend/port/Makefile
@@ -42,10 +42,6 @@ else
 	$(CC) $(CFLAGS) -c $<
 endif
 
-# IPC test program
-ipc_test: ipc_test.o pg_sema.o pg_shmem.o
-	$(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_EX) $(export_dynamic) $^ $(LIBS) -o $@
-
 distclean clean:
 	rm -f ipc_test ipc_test.o tas_cpp.s
 	$(MAKE) -C darwin clean
diff --git a/src/backend/port/ipc_test.c b/src/backend/port/ipc_test.c
deleted file mode 100644
index 62599193c334d821e75160b339035690e44e53bc..0000000000000000000000000000000000000000
--- a/src/backend/port/ipc_test.c
+++ /dev/null
@@ -1,334 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * ipc_test.c
- *	   Simplistic testbed for shared memory and semaphore code.
- *
- * This file allows for quick "smoke testing" of a PG semaphore or shared
- * memory implementation, with less overhead than compiling up a whole
- * installation.  To use:
- *	1. Run configure, then edit src/include/pg_config.h to select the
- *	   USE_xxx_SEMAPHORES and USE_xxx_SHARED_MEMORY settings you want.
- *	   Also, adjust the pg_sema.c and pg_shmem.c symlinks in
- *	   src/backend/port/ if needed.
- *	2. In src/backend/port/, do "make ipc_test".
- *	3. Run ipc_test and see if it works.
- *	4. If it seems to work, try building the whole system and running
- *	   the parallel regression tests for a more complete test.
- *
- *
- * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- *	  src/backend/port/ipc_test.c
- *
- *-------------------------------------------------------------------------
- */
-#include "postgres.h"
-
-#include <unistd.h>
-
-#include "miscadmin.h"
-#include "storage/ipc.h"
-#include "storage/pg_sema.h"
-#include "storage/pg_shmem.h"
-
-
-/********* stuff needed to satisfy references in shmem/sema code *********/
-
-
-volatile bool InterruptPending = false;
-volatile bool QueryCancelPending = false;
-volatile bool ProcDiePending = false;
-volatile bool ImmediateInterruptOK = false;
-volatile uint32 InterruptHoldoffCount = 0;
-volatile uint32 CritSectionCount = 0;
-
-bool		IsUnderPostmaster = false;
-bool		assert_enabled = true;
-
-int			MaxBackends = 32;
-int			NBuffers = 64;
-
-char	   *DataDir = ".";
-
-
-#define MAX_ON_EXITS 20
-
-static struct ONEXIT
-{
-	pg_on_exit_callback function;
-	Datum		arg;
-}	on_proc_exit_list[MAX_ON_EXITS], on_shmem_exit_list[MAX_ON_EXITS];
-
-static int	on_proc_exit_index,
-			on_shmem_exit_index;
-
-void
-proc_exit(int code)
-{
-	shmem_exit(code);
-	while (--on_proc_exit_index >= 0)
-		(*on_proc_exit_list[on_proc_exit_index].function) (code,
-								  on_proc_exit_list[on_proc_exit_index].arg);
-	exit(code);
-}
-
-void
-shmem_exit(int code)
-{
-	while (--on_shmem_exit_index >= 0)
-		(*on_shmem_exit_list[on_shmem_exit_index].function) (code,
-								on_shmem_exit_list[on_shmem_exit_index].arg);
-	on_shmem_exit_index = 0;
-}
-
-void
-on_shmem_exit(pg_on_exit_callback function, Datum arg)
-{
-	if (on_shmem_exit_index >= MAX_ON_EXITS)
-		elog(FATAL, "out of on_shmem_exit slots");
-
-	on_shmem_exit_list[on_shmem_exit_index].function = function;
-	on_shmem_exit_list[on_shmem_exit_index].arg = arg;
-
-	++on_shmem_exit_index;
-}
-
-void
-on_exit_reset(void)
-{
-	on_shmem_exit_index = 0;
-	on_proc_exit_index = 0;
-}
-
-void
-AddToDataDirLockFile(int target_line, const char *str)
-{
-}
-
-void
-ProcessInterrupts(void)
-{
-}
-
-void
-ExceptionalCondition(const char *conditionName,
-					 const char *errorType,
-					 const char *fileName,
-					 int lineNumber)
-{
-	fprintf(stderr, "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n",
-			errorType, conditionName,
-			fileName, lineNumber);
-	abort();
-}
-
-
-int
-errcode_for_file_access(void)
-{
-	return 0;
-}
-
-bool
-errstart(int elevel, const char *filename, int lineno,
-		 const char *funcname, const char *domain)
-{
-	return (elevel >= ERROR);
-}
-
-void
-errfinish(int dummy,...)
-{
-	proc_exit(1);
-}
-
-void
-elog_start(const char *filename, int lineno, const char *funcname)
-{
-}
-
-void
-elog_finish(int elevel, const char *fmt,...)
-{
-	fprintf(stderr, "ERROR: %s\n", fmt);
-	proc_exit(1);
-}
-
-int
-errcode(int sqlerrcode)
-{
-	return 0;					/* return value does not matter */
-}
-
-int
-errmsg(const char *fmt,...)
-{
-	fprintf(stderr, "ERROR: %s\n", fmt);
-	return 0;					/* return value does not matter */
-}
-
-int
-errmsg_internal(const char *fmt,...)
-{
-	fprintf(stderr, "ERROR: %s\n", fmt);
-	return 0;					/* return value does not matter */
-}
-
-int
-errdetail(const char *fmt,...)
-{
-	fprintf(stderr, "DETAIL: %s\n", fmt);
-	return 0;					/* return value does not matter */
-}
-
-int
-errdetail_log(const char *fmt,...)
-{
-	fprintf(stderr, "DETAIL: %s\n", fmt);
-	return 0;					/* return value does not matter */
-}
-
-int
-errhint(const char *fmt,...)
-{
-	fprintf(stderr, "HINT: %s\n", fmt);
-	return 0;					/* return value does not matter */
-}
-
-
-/********* here's the actual test *********/
-
-
-typedef struct MyStorage
-{
-	PGShmemHeader header;
-	int			flag;
-	PGSemaphoreData sem;
-}	MyStorage;
-
-
-int
-main(int argc, char **argv)
-{
-	MyStorage  *storage;
-	int			cpid;
-
-	printf("Creating shared memory ... ");
-	fflush(stdout);
-
-	storage = (MyStorage *) PGSharedMemoryCreate(8192, false, 5433);
-
-	storage->flag = 1234;
-
-	printf("OK\n");
-
-	printf("Creating semaphores ... ");
-	fflush(stdout);
-
-	PGReserveSemaphores(2, 5433);
-
-	PGSemaphoreCreate(&storage->sem);
-
-	printf("OK\n");
-
-	/* sema initial value is 1, so lock should work */
-
-	printf("Testing Lock ... ");
-	fflush(stdout);
-
-	PGSemaphoreLock(&storage->sem, false);
-
-	printf("OK\n");
-
-	/* now sema value is 0, so trylock should fail */
-
-	printf("Testing TryLock ... ");
-	fflush(stdout);
-
-	if (PGSemaphoreTryLock(&storage->sem))
-		printf("unexpected result!\n");
-	else
-		printf("OK\n");
-
-	/* unlocking twice and then locking twice should work... */
-
-	printf("Testing Multiple Lock ... ");
-	fflush(stdout);
-
-	PGSemaphoreUnlock(&storage->sem);
-	PGSemaphoreUnlock(&storage->sem);
-
-	PGSemaphoreLock(&storage->sem, false);
-	PGSemaphoreLock(&storage->sem, false);
-
-	printf("OK\n");
-
-	/* check Reset too */
-
-	printf("Testing Reset ... ");
-	fflush(stdout);
-
-	PGSemaphoreUnlock(&storage->sem);
-
-	PGSemaphoreReset(&storage->sem);
-
-	if (PGSemaphoreTryLock(&storage->sem))
-		printf("unexpected result!\n");
-	else
-		printf("OK\n");
-
-	/* Fork a child process and see if it can communicate */
-
-	printf("Forking child process ... ");
-	fflush(stdout);
-
-	cpid = fork();
-	if (cpid == 0)
-	{
-		/* In child */
-		on_exit_reset();
-		sleep(3);
-		storage->flag++;
-		PGSemaphoreUnlock(&storage->sem);
-		proc_exit(0);
-	}
-	if (cpid < 0)
-	{
-		/* Fork failed */
-		printf("failed: %s\n", strerror(errno));
-		proc_exit(1);
-	}
-
-	printf("forked child PID %d OK\n", cpid);
-
-	if (storage->flag != 1234)
-		printf("Wrong value found in shared memory!\n");
-
-	printf("Waiting for child (should wait 3 sec here) ... ");
-	fflush(stdout);
-
-	PGSemaphoreLock(&storage->sem, false);
-
-	printf("OK\n");
-
-	if (storage->flag != 1235)
-		printf("Wrong value found in shared memory!\n");
-
-	/* Test shutdown */
-
-	printf("Running shmem_exit processing ... ");
-	fflush(stdout);
-
-	shmem_exit(0);
-
-	printf("OK\n");
-
-	printf("Tests complete.\n");
-
-	proc_exit(0);
-
-	return 0;					/* not reached */
-}