Per discussion in [0], here is a patch set that allows pfree() to accept a NULL argument, like free() does.

Also, a patch that removes the now-unnecessary null pointer checks before calling pfree(). And a few patches that do the same for some other functions that I found around. (The one with FreeDir() is perhaps a bit arguable, since FreeDir() wraps closedir() which does *not* accept NULL arguments. Also, neither FreeFile() nor the underlying fclose() accept NULL.)


[0]: https://www.postgresql.org/message-id/1074830.1655442...@sss.pgh.pa.us
From e80484a9d3a6897984a2bc1f80df55d590e2e85b Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Mon, 22 Aug 2022 16:51:52 +0200
Subject: [PATCH 1/5] Remove unnecessary casts in free() and pfree()

---
 contrib/sepgsql/label.c        | 8 ++++----
 src/backend/utils/fmgr/dfmgr.c | 6 +++---
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/contrib/sepgsql/label.c b/contrib/sepgsql/label.c
index e4c98b7eae..6e7c0d7cff 100644
--- a/contrib/sepgsql/label.c
+++ b/contrib/sepgsql/label.c
@@ -662,28 +662,28 @@ quote_object_name(const char *src1, const char *src2,
                temp = quote_identifier(src1);
                appendStringInfoString(&result, temp);
                if (src1 != temp)
-                       pfree((void *) temp);
+                       pfree(temp);
        }
        if (src2)
        {
                temp = quote_identifier(src2);
                appendStringInfo(&result, ".%s", temp);
                if (src2 != temp)
-                       pfree((void *) temp);
+                       pfree(temp);
        }
        if (src3)
        {
                temp = quote_identifier(src3);
                appendStringInfo(&result, ".%s", temp);
                if (src3 != temp)
-                       pfree((void *) temp);
+                       pfree(temp);
        }
        if (src4)
        {
                temp = quote_identifier(src4);
                appendStringInfo(&result, ".%s", temp);
                if (src4 != temp)
-                       pfree((void *) temp);
+                       pfree(temp);
        }
        return result.data;
 }
diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index 08fd7e1264..6ae6fc1556 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -240,7 +240,7 @@ internal_load_library(const char *libname)
                if (file_scanner->handle == NULL)
                {
                        load_error = dlerror();
-                       free((char *) file_scanner);
+                       free(file_scanner);
                        /* errcode_for_file_access might not be appropriate 
here? */
                        ereport(ERROR,
                                        (errcode_for_file_access(),
@@ -263,7 +263,7 @@ internal_load_library(const char *libname)
 
                                /* try to close library */
                                dlclose(file_scanner->handle);
-                               free((char *) file_scanner);
+                               free(file_scanner);
 
                                /* issue suitable complaint */
                                incompatible_module_error(libname, 
&module_magic_data);
@@ -273,7 +273,7 @@ internal_load_library(const char *libname)
                {
                        /* try to close library */
                        dlclose(file_scanner->handle);
-                       free((char *) file_scanner);
+                       free(file_scanner);
                        /* complain */
                        ereport(ERROR,
                                        (errmsg("incompatible library \"%s\": 
missing magic block",
-- 
2.37.1

From f5eea6d2f1e8a8ed81cf177cef320e041bbff90b Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Mon, 22 Aug 2022 16:51:52 +0200
Subject: [PATCH 2/5] Change pfree to accept NULL argument

---
 src/backend/utils/mmgr/README | 6 +++++-
 src/backend/utils/mmgr/mcxt.c | 7 ++++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/backend/utils/mmgr/README b/src/backend/utils/mmgr/README
index 221b4bd343..e552c6ada6 100644
--- a/src/backend/utils/mmgr/README
+++ b/src/backend/utils/mmgr/README
@@ -66,7 +66,11 @@ pointer, but a valid chunk of which no bytes may be used.  
However, the
 chunk might later be repalloc'd larger; it can also be pfree'd without
 error.  Similarly, repalloc allows realloc'ing to zero size.
 
-* pfree and repalloc do not accept a NULL pointer.  This is intentional.
+* repalloc does not accept a NULL pointer.  This is intentional.  (As
+mentioned above, repalloc does not depend on the current memory
+context.  But then it needs to know which memory context to do the
+allocation in.  So the first allocation has to be done outside
+repalloc.)
 
 
 The Current Memory Context
diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c
index e12be1b9bd..d85e961c1e 100644
--- a/src/backend/utils/mmgr/mcxt.c
+++ b/src/backend/utils/mmgr/mcxt.c
@@ -1174,7 +1174,12 @@ palloc_extended(Size size, int flags)
 void
 pfree(void *pointer)
 {
-       MemoryContext context = GetMemoryChunkContext(pointer);
+       MemoryContext context;
+
+       if (!pointer)
+               return;
+
+       context = GetMemoryChunkContext(pointer);
 
        context->methods->free_p(context, pointer);
        VALGRIND_MEMPOOL_FREE(context, pointer);
-- 
2.37.1

From 229fcc1ada82c46ffe80ab60779316de4e273831 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Mon, 22 Aug 2022 16:51:52 +0200
Subject: [PATCH 3/5] Remove no longer needed null pointer checks before
 pfree()

---
 contrib/bloom/blscan.c                        |  6 +-
 contrib/dblink/dblink.c                       |  9 +-
 contrib/lo/lo.c                               |  6 +-
 contrib/pageinspect/heapfuncs.c               |  6 +-
 .../pg_stat_statements/pg_stat_statements.c   |  6 +-
 contrib/pg_trgm/trgm_gist.c                   |  9 +-
 contrib/pgcrypto/px.c                         |  3 +-
 contrib/postgres_fdw/connection.c             |  3 +-
 contrib/postgres_fdw/postgres_fdw.c           |  3 +-
 contrib/sepgsql/label.c                       |  4 +-
 contrib/sepgsql/uavc.c                        |  6 +-
 contrib/tablefunc/tablefunc.c                 | 10 +--
 contrib/xml2/xpath.c                          |  6 +-
 src/backend/access/common/printtup.c          |  9 +-
 src/backend/access/common/reloptions.c        |  6 +-
 src/backend/access/gin/gindatapage.c          |  3 +-
 src/backend/access/gin/ginget.c               |  3 +-
 src/backend/access/gin/ginscan.c              |  3 +-
 src/backend/access/gin/ginvacuum.c            |  3 +-
 src/backend/access/gist/gistbuild.c           |  3 +-
 src/backend/access/hash/hash.c                |  3 +-
 src/backend/access/heap/heapam.c              | 12 +--
 src/backend/access/heap/vacuumlazy.c          |  3 +-
 src/backend/access/index/genam.c              |  6 +-
 src/backend/access/nbtree/nbtpage.c           | 15 ++--
 src/backend/access/nbtree/nbtree.c            |  9 +-
 src/backend/access/spgist/spgscan.c           | 33 ++-----
 src/backend/access/transam/multixact.c        |  3 +-
 src/backend/access/transam/twophase.c         |  3 +-
 src/backend/access/transam/xact.c             | 15 ++--
 src/backend/access/transam/xlog.c             |  3 +-
 src/backend/access/transam/xlogreader.c       |  6 +-
 src/backend/catalog/dependency.c              |  3 +-
 src/backend/catalog/pg_shdepend.c             |  6 +-
 src/backend/catalog/pg_subscription.c         |  3 +-
 src/backend/commands/analyze.c                |  3 +-
 src/backend/commands/explain.c                |  3 +-
 src/backend/commands/indexcmds.c              |  3 +-
 src/backend/commands/trigger.c                | 12 +--
 src/backend/executor/execTuples.c             | 18 ++--
 src/backend/executor/nodeGather.c             |  3 +-
 src/backend/executor/nodeGatherMerge.c        |  3 +-
 src/backend/executor/nodeTidscan.c            |  3 +-
 src/backend/executor/spi.c                    |  3 +-
 src/backend/executor/tstoreReceiver.c         |  6 +-
 src/backend/jit/llvm/llvmjit.c                |  3 +-
 src/backend/libpq/auth-scram.c                |  6 +-
 src/backend/libpq/auth.c                      |  6 +-
 src/backend/libpq/be-secure-openssl.c         | 14 +--
 src/backend/nodes/bitmapset.c                 |  5 +-
 src/backend/nodes/tidbitmap.c                 |  6 +-
 src/backend/optimizer/plan/planner.c          |  3 +-
 src/backend/parser/scan.l                     |  3 +-
 src/backend/postmaster/autovacuum.c           | 18 ++--
 src/backend/postmaster/checkpointer.c         |  3 +-
 src/backend/postmaster/syslogger.c            |  9 +-
 .../replication/logical/reorderbuffer.c       | 33 +++----
 src/backend/replication/logical/snapbuild.c   | 12 +--
 src/backend/replication/logical/worker.c      |  4 +-
 src/backend/replication/walreceiver.c         |  7 +-
 src/backend/storage/buffer/freelist.c         |  4 +-
 src/backend/storage/ipc/shm_mq.c              |  3 +-
 src/backend/storage/lmgr/lock.c               |  3 +-
 src/backend/tcop/postgres.c                   |  3 +-
 src/backend/tsearch/dict_thesaurus.c          |  9 +-
 src/backend/tsearch/spell.c                   |  6 +-
 src/backend/tsearch/to_tsany.c                |  3 +-
 src/backend/tsearch/wparser_def.c             |  6 +-
 src/backend/utils/activity/pgstat_shmem.c     |  3 +-
 src/backend/utils/adt/jsonb_util.c            |  6 +-
 src/backend/utils/adt/jsonpath_scan.l         |  3 +-
 src/backend/utils/adt/like_support.c          |  6 +-
 src/backend/utils/adt/numeric.c               |  5 +-
 src/backend/utils/adt/pg_locale.c             |  3 +-
 src/backend/utils/adt/tsvector_op.c           |  3 +-
 src/backend/utils/adt/tsvector_parser.c       |  2 +-
 src/backend/utils/adt/varlena.c               |  9 +-
 src/backend/utils/adt/xml.c                   |  4 +-
 src/backend/utils/cache/attoptcache.c         |  3 +-
 src/backend/utils/cache/lsyscache.c           |  9 +-
 src/backend/utils/cache/relcache.c            | 45 +++-------
 src/backend/utils/cache/spccache.c            |  3 +-
 src/backend/utils/cache/ts_cache.c            |  3 +-
 src/backend/utils/cache/typcache.c            |  3 +-
 src/backend/utils/error/elog.c                | 85 ++++++-------------
 src/backend/utils/init/miscinit.c             |  3 +-
 src/backend/utils/mb/stringinfo_mb.c          |  3 +-
 src/backend/utils/misc/guc-file.l             | 21 ++---
 src/backend/utils/misc/guc.c                  |  3 +-
 src/backend/utils/resowner/resowner.c         |  3 +-
 src/backend/utils/sort/logtape.c              |  9 +-
 src/backend/utils/sort/sharedtuplestore.c     |  3 +-
 src/bin/pg_verifybackup/parse_manifest.c      | 42 +++------
 src/common/compression.c                      |  3 +-
 src/include/replication/walreceiver.h         |  3 +-
 src/pl/plperl/plperl.c                        |  3 +-
 src/pl/plpython/plpy_elog.c                   |  6 +-
 src/pl/plpython/plpy_exec.c                   |  9 +-
 src/pl/plpython/plpy_plpymodule.c             |  3 +-
 src/pl/plpython/plpy_typeio.c                 |  6 +-
 .../modules/test_oat_hooks/test_oat_hooks.c   |  6 +-
 101 files changed, 250 insertions(+), 527 deletions(-)

diff --git a/contrib/bloom/blscan.c b/contrib/bloom/blscan.c
index 4c923488bd..945d37d316 100644
--- a/contrib/bloom/blscan.c
+++ b/contrib/bloom/blscan.c
@@ -50,8 +50,7 @@ blrescan(IndexScanDesc scan, ScanKey scankey, int nscankeys,
 {
        BloomScanOpaque so = (BloomScanOpaque) scan->opaque;
 
-       if (so->sign)
-               pfree(so->sign);
+       pfree(so->sign);
        so->sign = NULL;
 
        if (scankey && scan->numberOfKeys > 0)
@@ -69,8 +68,7 @@ blendscan(IndexScanDesc scan)
 {
        BloomScanOpaque so = (BloomScanOpaque) scan->opaque;
 
-       if (so->sign)
-               pfree(so->sign);
+       pfree(so->sign);
        so->sign = NULL;
 }
 
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c
index e323fdd0e6..69fce2a3e9 100644
--- a/contrib/dblink/dblink.c
+++ b/contrib/dblink/dblink.c
@@ -342,8 +342,7 @@ dblink_connect(PG_FUNCTION_ARGS)
                msg = pchomp(PQerrorMessage(conn));
                PQfinish(conn);
                ReleaseExternalFD();
-               if (rconn)
-                       pfree(rconn);
+               pfree(rconn);
 
                ereport(ERROR,
                                
(errcode(ERRCODE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION),
@@ -1274,8 +1273,7 @@ storeRow(volatile storeInfo *sinfo, PGresult *res, bool 
first)
                 * Set up sufficiently-wide string pointers array; this won't 
change
                 * in size so it's easy to preallocate.
                 */
-               if (sinfo->cstrs)
-                       pfree(sinfo->cstrs);
+               pfree(sinfo->cstrs);
                sinfo->cstrs = (char **) palloc(nfields * sizeof(char *));
        }
 
@@ -2644,8 +2642,7 @@ dblink_security_check(PGconn *conn, remoteConn *rconn)
                {
                        PQfinish(conn);
                        ReleaseExternalFD();
-                       if (rconn)
-                               pfree(rconn);
+                       pfree(rconn);
 
                        ereport(ERROR,
                                        
(errcode(ERRCODE_S_R_E_PROHIBITED_SQL_STATEMENT_ATTEMPTED),
diff --git a/contrib/lo/lo.c b/contrib/lo/lo.c
index 457be26c4e..46909ead07 100644
--- a/contrib/lo/lo.c
+++ b/contrib/lo/lo.c
@@ -83,10 +83,8 @@ lo_manage(PG_FUNCTION_ARGS)
                        DirectFunctionCall1(be_lo_unlink,
                                                                
ObjectIdGetDatum(atooid(orig)));
 
-               if (newv)
-                       pfree(newv);
-               if (orig)
-                       pfree(orig);
+               pfree(newv);
+               pfree(orig);
        }
 
        /*
diff --git a/contrib/pageinspect/heapfuncs.c b/contrib/pageinspect/heapfuncs.c
index 2ff70405cf..fb356ffd7c 100644
--- a/contrib/pageinspect/heapfuncs.c
+++ b/contrib/pageinspect/heapfuncs.c
@@ -397,8 +397,7 @@ tuple_data_split_internal(Oid relid, char *tupdata,
 
                raw_attrs = accumArrayResult(raw_attrs, 
PointerGetDatum(attr_data),
                                                                         
is_null, BYTEAOID, CurrentMemoryContext);
-               if (attr_data)
-                       pfree(attr_data);
+               pfree(attr_data);
        }
 
        if (tupdata_len != off)
@@ -489,8 +488,7 @@ tuple_data_split(PG_FUNCTION_ARGS)
                                                                        
t_infomask, t_infomask2, t_bits,
                                                                        
do_detoast);
 
-       if (t_bits)
-               pfree(t_bits);
+       pfree(t_bits);
 
        PG_RETURN_ARRAYTYPE_P(res);
 }
diff --git a/contrib/pg_stat_statements/pg_stat_statements.c 
b/contrib/pg_stat_statements/pg_stat_statements.c
index ba868f0de9..6c08ae1bde 100644
--- a/contrib/pg_stat_statements/pg_stat_statements.c
+++ b/contrib/pg_stat_statements/pg_stat_statements.c
@@ -697,8 +697,7 @@ pgss_shmem_startup(void)
                         errmsg("could not write file \"%s\": %m",
                                        PGSS_TEXT_FILE)));
 fail:
-       if (buffer)
-               pfree(buffer);
+       pfree(buffer);
        if (file)
                FreeFile(file);
        if (qfile)
@@ -1407,8 +1406,7 @@ pgss_store(const char *query, uint64 queryId,
        LWLockRelease(pgss->lock);
 
        /* We postpone this clean-up until we're out of the lock */
-       if (norm_query)
-               pfree(norm_query);
+       pfree(norm_query);
 }
 
 /*
diff --git a/contrib/pg_trgm/trgm_gist.c b/contrib/pg_trgm/trgm_gist.c
index 7a7be807af..457f13226b 100644
--- a/contrib/pg_trgm/trgm_gist.c
+++ b/contrib/pg_trgm/trgm_gist.c
@@ -290,8 +290,7 @@ gtrgm_consistent(PG_FUNCTION_ARGS)
                        newcache->trigrams = NULL;
                newcache->graph = graph;
 
-               if (cache)
-                       pfree(cache);
+               pfree(cache);
                fcinfo->flinfo->fn_extra = (void *) newcache;
                cache = newcache;
        }
@@ -475,8 +474,7 @@ gtrgm_distance(PG_FUNCTION_ARGS)
                memcpy(newcache, query, querysize);
                memcpy(newcache + MAXALIGN(querysize), qtrg, VARSIZE(qtrg));
 
-               if (cache)
-                       pfree(cache);
+               pfree(cache);
                fcinfo->flinfo->fn_extra = newcache;
                cache = newcache;
        }
@@ -714,8 +712,7 @@ gtrgm_penalty(PG_FUNCTION_ARGS)
                        cachedVal = (TRGM *) (newcache + MAXALIGN(siglen));
                        memcpy(cachedVal, newval, newvalsize);
 
-                       if (cache)
-                               pfree(cache);
+                       pfree(cache);
                        fcinfo->flinfo->fn_extra = newcache;
                        cache = newcache;
                }
diff --git a/contrib/pgcrypto/px.c b/contrib/pgcrypto/px.c
index 3b098c6151..53d1aceda6 100644
--- a/contrib/pgcrypto/px.c
+++ b/contrib/pgcrypto/px.c
@@ -208,8 +208,7 @@ combo_init(PX_Combo *cx, const uint8 *key, unsigned klen,
 
        err = px_cipher_init(c, keybuf, klen, ivbuf);
 
-       if (ivbuf)
-               pfree(ivbuf);
+       pfree(ivbuf);
        pfree(keybuf);
 
        return err;
diff --git a/contrib/postgres_fdw/connection.c 
b/contrib/postgres_fdw/connection.c
index 939d114f02..cf13049a7b 100644
--- a/contrib/postgres_fdw/connection.c
+++ b/contrib/postgres_fdw/connection.c
@@ -500,8 +500,7 @@ connect_pg_server(ForeignServer *server, UserMapping *user)
                /* Prepare new session for use */
                configure_remote_session(conn);
 
-               if (appname != NULL)
-                       pfree(appname);
+               pfree(appname);
                pfree(keywords);
                pfree(values);
        }
diff --git a/contrib/postgres_fdw/postgres_fdw.c 
b/contrib/postgres_fdw/postgres_fdw.c
index 16320170ce..1c9c771a28 100644
--- a/contrib/postgres_fdw/postgres_fdw.c
+++ b/contrib/postgres_fdw/postgres_fdw.c
@@ -6032,8 +6032,7 @@ postgresGetForeignJoinPaths(PlannerInfo *root,
        if (!foreign_join_ok(root, joinrel, jointype, outerrel, innerrel, 
extra))
        {
                /* Free path required for EPQ if we copied one; we don't need 
it now */
-               if (epq_path)
-                       pfree(epq_path);
+               pfree(epq_path);
                return;
        }
 
diff --git a/contrib/sepgsql/label.c b/contrib/sepgsql/label.c
index 6e7c0d7cff..e9476c9322 100644
--- a/contrib/sepgsql/label.c
+++ b/contrib/sepgsql/label.c
@@ -177,9 +177,7 @@ sepgsql_xact_callback(XactEvent event, void *arg)
                        else
                                new_label = NULL;
 
-                       if (client_label_committed)
-                               pfree(client_label_committed);
-
+                       pfree(client_label_committed);
                        client_label_committed = new_label;
 
                        /*
diff --git a/contrib/sepgsql/uavc.c b/contrib/sepgsql/uavc.c
index 76597983f4..042a51dbfd 100644
--- a/contrib/sepgsql/uavc.c
+++ b/contrib/sepgsql/uavc.c
@@ -109,8 +109,7 @@ sepgsql_avc_reclaim(void)
 
                                pfree(cache->scontext);
                                pfree(cache->tcontext);
-                               if (cache->ncontext)
-                                       pfree(cache->ncontext);
+                               pfree(cache->ncontext);
                                pfree(cache);
 
                                avc_num_caches--;
@@ -428,8 +427,7 @@ sepgsql_avc_check_perms(const ObjectAddress *tobject,
        rc = sepgsql_avc_check_perms_label(tcontext,
                                                                           
tclass, required,
                                                                           
audit_name, abort_on_violation);
-       if (tcontext)
-               pfree(tcontext);
+       pfree(tcontext);
 
        return rc;
 }
diff --git a/contrib/tablefunc/tablefunc.c b/contrib/tablefunc/tablefunc.c
index e308228bde..8d33510cee 100644
--- a/contrib/tablefunc/tablefunc.c
+++ b/contrib/tablefunc/tablefunc.c
@@ -93,11 +93,8 @@ typedef struct
 
 #define xpfree(var_) \
        do { \
-               if (var_ != NULL) \
-               { \
-                       pfree(var_); \
-                       var_ = NULL; \
-               } \
+               pfree(var_); \
+               var_ = NULL; \
        } while (0)
 
 #define xpstrdup(tgtvar_, srcvar_) \
@@ -584,8 +581,7 @@ crosstab(PG_FUNCTION_ARGS)
 
                /* Clean up */
                for (i = 0; i < num_categories + 1; i++)
-                       if (values[i] != NULL)
-                               pfree(values[i]);
+                       pfree(values[i]);
                pfree(values);
        }
 
diff --git a/contrib/xml2/xpath.c b/contrib/xml2/xpath.c
index b8ee757674..b9297967bf 100644
--- a/contrib/xml2/xpath.c
+++ b/contrib/xml2/xpath.c
@@ -711,10 +711,8 @@ xpath_table(PG_FUNCTION_ARGS)
                                xmlFreeDoc(doctree);
                        doctree = NULL;
 
-                       if (pkey)
-                               pfree(pkey);
-                       if (xmldoc)
-                               pfree(xmldoc);
+                       pfree(pkey);
+                       pfree(xmldoc);
                }
        }
        PG_CATCH();
diff --git a/src/backend/access/common/printtup.c 
b/src/backend/access/common/printtup.c
index d2f3b57288..a1736d1010 100644
--- a/src/backend/access/common/printtup.c
+++ b/src/backend/access/common/printtup.c
@@ -253,8 +253,7 @@ printtup_prepare_info(DR_printtup *myState, TupleDesc 
typeinfo, int numAttrs)
        int                     i;
 
        /* get rid of any old data */
-       if (myState->myinfo)
-               pfree(myState->myinfo);
+       pfree(myState->myinfo);
        myState->myinfo = NULL;
 
        myState->attrinfo = typeinfo;
@@ -387,14 +386,12 @@ printtup_shutdown(DestReceiver *self)
 {
        DR_printtup *myState = (DR_printtup *) self;
 
-       if (myState->myinfo)
-               pfree(myState->myinfo);
+       pfree(myState->myinfo);
        myState->myinfo = NULL;
 
        myState->attrinfo = NULL;
 
-       if (myState->buf.data)
-               pfree(myState->buf.data);
+       pfree(myState->buf.data);
        myState->buf.data = NULL;
 
        if (myState->tmpcontext)
diff --git a/src/backend/access/common/reloptions.c 
b/src/backend/access/common/reloptions.c
index 609329bb21..2e56dedad9 100644
--- a/src/backend/access/common/reloptions.c
+++ b/src/backend/access/common/reloptions.c
@@ -617,8 +617,7 @@ initialize_reloptions(void)
        }
        j += num_custom_options;
 
-       if (relOpts)
-               pfree(relOpts);
+       pfree(relOpts);
        relOpts = MemoryContextAlloc(TopMemoryContext,
                                                                 (j + 1) * 
sizeof(relopt_gen *));
 
@@ -1972,8 +1971,7 @@ build_local_reloptions(local_relopts *relopts, Datum 
options, bool validate)
        foreach(lc, relopts->validators)
                ((relopts_validator) lfirst(lc)) (opts, vals, noptions);
 
-       if (elems)
-               pfree(elems);
+       pfree(elems);
 
        return opts;
 }
diff --git a/src/backend/access/gin/gindatapage.c 
b/src/backend/access/gin/gindatapage.c
index 7c76d1f90d..41783d2e38 100644
--- a/src/backend/access/gin/gindatapage.c
+++ b/src/backend/access/gin/gindatapage.c
@@ -1614,8 +1614,7 @@ leafRepackItems(disassembledLeaf *leaf, ItemPointer 
remaining)
                                         * The new segment is inserted after 
this one, so it will
                                         * be processed in the next iteration 
of this loop.
                                         */
-                                       if (seginfo->seg)
-                                               pfree(seginfo->seg);
+                                       pfree(seginfo->seg);
                                        seginfo->seg = 
ginCompressPostingList(seginfo->items,
                                                                                
                                  seginfo->nitems,
                                                                                
                                  GinPostingListSegmentTargetSize,
diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c
index fc85ba99ac..78f4df1bf8 100644
--- a/src/backend/access/gin/ginget.c
+++ b/src/backend/access/gin/ginget.c
@@ -327,8 +327,7 @@ startScanEntry(GinState *ginstate, GinScanEntry entry, 
Snapshot snapshot)
        entry->buffer = InvalidBuffer;
        ItemPointerSetMin(&entry->curItem);
        entry->offset = InvalidOffsetNumber;
-       if (entry->list)
-               pfree(entry->list);
+       pfree(entry->list);
        entry->list = NULL;
        entry->nlist = 0;
        entry->matchBitmap = NULL;
diff --git a/src/backend/access/gin/ginscan.c b/src/backend/access/gin/ginscan.c
index b776d04459..3ffbc82b29 100644
--- a/src/backend/access/gin/ginscan.c
+++ b/src/backend/access/gin/ginscan.c
@@ -243,8 +243,7 @@ ginFreeScanKeys(GinScanOpaque so)
 
                if (entry->buffer != InvalidBuffer)
                        ReleaseBuffer(entry->buffer);
-               if (entry->list)
-                       pfree(entry->list);
+               pfree(entry->list);
                if (entry->matchIterator)
                        tbm_end_iterate(entry->matchIterator);
                if (entry->matchBitmap)
diff --git a/src/backend/access/gin/ginvacuum.c 
b/src/backend/access/gin/ginvacuum.c
index b4fa5f6bf8..fab8e954c9 100644
--- a/src/backend/access/gin/ginvacuum.c
+++ b/src/backend/access/gin/ginvacuum.c
@@ -544,8 +544,7 @@ ginVacuumEntryPage(GinVacuumState *gvs, Buffer buffer, 
BlockNumber *roots, uint3
                                itup = GinFormTuple(&gvs->ginstate, attnum, 
key, category,
                                                                        (char 
*) plist, plistsize,
                                                                        nitems, 
true);
-                               if (plist)
-                                       pfree(plist);
+                               pfree(plist);
                                PageIndexTupleDelete(tmppage, i);
 
                                if (PageAddItem(tmppage, (Item) itup, 
IndexTupleSize(itup), i, false, false) != i)
diff --git a/src/backend/access/gist/gistbuild.c 
b/src/backend/access/gist/gistbuild.c
index 374e64e808..639c312f40 100644
--- a/src/backend/access/gist/gistbuild.c
+++ b/src/backend/access/gist/gistbuild.c
@@ -448,8 +448,7 @@ gist_indexsortbuild(GISTBuildState *state)
                gist_indexsortbuild_levelstate_flush(state, levelstate);
                parent = levelstate->parent;
                for (int i = 0; i < GIST_SORTED_BUILD_PAGE_NUM; i++)
-                       if (levelstate->pages[i])
-                               pfree(levelstate->pages[i]);
+                       pfree(levelstate->pages[i]);
                pfree(levelstate);
                levelstate = parent;
        }
diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c
index c361509d68..e5cd9f08d9 100644
--- a/src/backend/access/hash/hash.c
+++ b/src/backend/access/hash/hash.c
@@ -439,8 +439,7 @@ hashendscan(IndexScanDesc scan)
 
        _hash_dropscanbuf(rel, so);
 
-       if (so->killedItems != NULL)
-               pfree(so->killedItems);
+       pfree(so->killedItems);
        pfree(so);
        scan->opaque = NULL;
 }
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index aab8d6fa4e..e79c334b81 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -1277,14 +1277,12 @@ heap_endscan(TableScanDesc sscan)
         */
        RelationDecrementReferenceCount(scan->rs_base.rs_rd);
 
-       if (scan->rs_base.rs_key)
-               pfree(scan->rs_base.rs_key);
+       pfree(scan->rs_base.rs_key);
 
        if (scan->rs_strategy != NULL)
                FreeAccessStrategy(scan->rs_strategy);
 
-       if (scan->rs_parallelworkerdata != NULL)
-               pfree(scan->rs_parallelworkerdata);
+       pfree(scan->rs_parallelworkerdata);
 
        if (scan->rs_base.rs_flags & SO_TEMP_SNAPSHOT)
                UnregisterSnapshot(scan->rs_base.rs_snapshot);
@@ -4377,8 +4375,7 @@ heap_lock_tuple(Relation relation, HeapTuple tuple,
                                        }
                                }
 
-                               if (members)
-                                       pfree(members);
+                               pfree(members);
                        }
                        else if (TransactionIdIsCurrentTransactionId(xwait))
                        {
@@ -5536,8 +5533,7 @@ heap_lock_updated_tuple_rec(Relation rel, ItemPointer 
tid, TransactionId xid,
                                                goto out_locked;
                                        }
                                }
-                               if (members)
-                                       pfree(members);
+                               pfree(members);
                        }
                        else
                        {
diff --git a/src/backend/access/heap/vacuumlazy.c 
b/src/backend/access/heap/vacuumlazy.c
index b802ed247e..65f8e0db27 100644
--- a/src/backend/access/heap/vacuumlazy.c
+++ b/src/backend/access/heap/vacuumlazy.c
@@ -797,8 +797,7 @@ heap_vacuum_rel(Relation rel, VacuumParams *params,
        /* Cleanup index statistics and index names */
        for (int i = 0; i < vacrel->nindexes; i++)
        {
-               if (vacrel->indstats[i])
-                       pfree(vacrel->indstats[i]);
+               pfree(vacrel->indstats[i]);
 
                if (instrument)
                        pfree(indnames[i]);
diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c
index 98af5347b9..8f7f5728a7 100644
--- a/src/backend/access/index/genam.c
+++ b/src/backend/access/index/genam.c
@@ -144,10 +144,8 @@ RelationGetIndexScan(Relation indexRelation, int nkeys, 
int norderbys)
 void
 IndexScanEnd(IndexScanDesc scan)
 {
-       if (scan->keyData != NULL)
-               pfree(scan->keyData);
-       if (scan->orderByData != NULL)
-               pfree(scan->orderByData);
+       pfree(scan->keyData);
+       pfree(scan->orderByData);
 
        pfree(scan);
 }
diff --git a/src/backend/access/nbtree/nbtpage.c 
b/src/backend/access/nbtree/nbtpage.c
index 8b96708b3e..66cca869d5 100644
--- a/src/backend/access/nbtree/nbtpage.c
+++ b/src/backend/access/nbtree/nbtpage.c
@@ -391,8 +391,7 @@ _bt_getroot(Relation rel, int access)
                }
                _bt_relbuf(rel, rootbuf);
                /* Cache is stale, throw it away */
-               if (rel->rd_amcache)
-                       pfree(rel->rd_amcache);
+               pfree(rel->rd_amcache);
                rel->rd_amcache = NULL;
        }
 
@@ -592,8 +591,7 @@ _bt_gettrueroot(Relation rel)
         * is out-of-date anyway.  In light of point (b), it's probably safest 
to
         * actively flush any cached metapage info.
         */
-       if (rel->rd_amcache)
-               pfree(rel->rd_amcache);
+       pfree(rel->rd_amcache);
        rel->rd_amcache = NULL;
 
        metabuf = _bt_getbuf(rel, BTREE_METAPAGE, BT_READ);
@@ -1267,8 +1265,7 @@ _bt_delitems_vacuum(Relation rel, Buffer buf,
        END_CRIT_SECTION();
 
        /* can't leak memory here */
-       if (updatedbuf != NULL)
-               pfree(updatedbuf);
+       pfree(updatedbuf);
        /* free tuples allocated within _bt_delitems_update() */
        for (int i = 0; i < nupdatable; i++)
                pfree(updatable[i]->itup);
@@ -1384,8 +1381,7 @@ _bt_delitems_delete(Relation rel, Buffer buf, 
TransactionId latestRemovedXid,
        END_CRIT_SECTION();
 
        /* can't leak memory here */
-       if (updatedbuf != NULL)
-               pfree(updatedbuf);
+       pfree(updatedbuf);
        /* free tuples allocated within _bt_delitems_update() */
        for (int i = 0; i < nupdatable; i++)
                pfree(updatable[i]->itup);
@@ -2961,8 +2957,7 @@ _bt_pendingfsm_finalize(Relation rel, BTVacState *vstate)
        if (vstate->npendingpages == 0)
        {
                /* Just free memory when nothing to do */
-               if (vstate->pendingpages)
-                       pfree(vstate->pendingpages);
+               pfree(vstate->pendingpages);
 
                return;
        }
diff --git a/src/backend/access/nbtree/nbtree.c 
b/src/backend/access/nbtree/nbtree.c
index b52eca8f38..6e1604c799 100644
--- a/src/backend/access/nbtree/nbtree.c
+++ b/src/backend/access/nbtree/nbtree.c
@@ -464,15 +464,12 @@ btendscan(IndexScanDesc scan)
        /* No need to invalidate positions, the RAM is about to be freed. */
 
        /* Release storage */
-       if (so->keyData != NULL)
-               pfree(so->keyData);
+       pfree(so->keyData);
        /* so->arrayKeyData and so->arrayKeys are in arrayContext */
        if (so->arrayContext != NULL)
                MemoryContextDelete(so->arrayContext);
-       if (so->killedItems != NULL)
-               pfree(so->killedItems);
-       if (so->currTuples != NULL)
-               pfree(so->currTuples);
+       pfree(so->killedItems);
+       pfree(so->currTuples);
        /* so->markTuples should not be pfree'd, see btrescan */
        pfree(so);
 }
diff --git a/src/backend/access/spgist/spgscan.c 
b/src/backend/access/spgist/spgscan.c
index 87a345d290..7ccdba37db 100644
--- a/src/backend/access/spgist/spgscan.c
+++ b/src/backend/access/spgist/spgscan.c
@@ -90,11 +90,8 @@ spgFreeSearchItem(SpGistScanOpaque so, SpGistSearchItem 
*item)
                DatumGetPointer(item->value) != NULL)
                pfree(DatumGetPointer(item->value));
 
-       if (item->leafTuple)
-               pfree(item->leafTuple);
-
-       if (item->traversalValue)
-               pfree(item->traversalValue);
+       pfree(item->leafTuple);
+       pfree(item->traversalValue);
 
        pfree(item);
 }
@@ -175,19 +172,14 @@ resetSpGistScanOpaque(SpGistScanOpaque so)
        if (so->numberOfOrderBys > 0)
        {
                /* Must pfree distances to avoid memory leak */
-               int                     i;
-
-               for (i = 0; i < so->nPtrs; i++)
-                       if (so->distances[i])
-                               pfree(so->distances[i]);
+               for (int i = 0; i < so->nPtrs; i++)
+                       pfree(so->distances[i]);
        }
 
        if (so->want_itup)
        {
                /* Must pfree reconstructed tuples to avoid memory leak */
-               int                     i;
-
-               for (i = 0; i < so->nPtrs; i++)
+               for (int i = 0; i < so->nPtrs; i++)
                        pfree(so->reconTups[i]);
        }
        so->iPtr = so->nPtrs = 0;
@@ -433,15 +425,13 @@ spgendscan(IndexScanDesc scan)
        MemoryContextDelete(so->tempCxt);
        MemoryContextDelete(so->traversalCxt);
 
-       if (so->keyData)
-               pfree(so->keyData);
+       pfree(so->keyData);
 
        if (so->state.leafTupDesc &&
                so->state.leafTupDesc != RelationGetDescr(so->state.index))
                FreeTupleDesc(so->state.leafTupDesc);
 
-       if (so->state.deadTupleStorage)
-               pfree(so->state.deadTupleStorage);
+       pfree(so->state.deadTupleStorage);
 
        if (scan->numberOfOrderBys > 0)
        {
@@ -1054,19 +1044,14 @@ spggettuple(IndexScanDesc scan, ScanDirection dir)
                if (so->numberOfOrderBys > 0)
                {
                        /* Must pfree distances to avoid memory leak */
-                       int                     i;
-
-                       for (i = 0; i < so->nPtrs; i++)
-                               if (so->distances[i])
+                       for (int i = 0; i < so->nPtrs; i++)
                                        pfree(so->distances[i]);
                }
 
                if (so->want_itup)
                {
                        /* Must pfree reconstructed tuples to avoid memory leak 
*/
-                       int                     i;
-
-                       for (i = 0; i < so->nPtrs; i++)
+                       for (int i = 0; i < so->nPtrs; i++)
                                pfree(so->reconTups[i]);
                }
                so->iPtr = so->nPtrs = 0;
diff --git a/src/backend/access/transam/multixact.c 
b/src/backend/access/transam/multixact.c
index 8f7d12950e..bdd1a7dc40 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -1658,8 +1658,7 @@ mxid_to_string(MultiXactId multi, int nmembers, 
MultiXactMember *members)
        StringInfoData buf;
        int                     i;
 
-       if (str != NULL)
-               pfree(str);
+       pfree(str);
 
        initStringInfo(&buf);
 
diff --git a/src/backend/access/transam/twophase.c 
b/src/backend/access/transam/twophase.c
index 803d169f57..75edd8ec2b 100644
--- a/src/backend/access/transam/twophase.c
+++ b/src/backend/access/transam/twophase.c
@@ -2033,8 +2033,7 @@ StandbyRecoverPreparedTransactions(void)
                buf = ProcessTwoPhaseBuffer(xid,
                                                                        
gxact->prepare_start_lsn,
                                                                        
gxact->ondisk, false, false);
-               if (buf != NULL)
-                       pfree(buf);
+               pfree(buf);
        }
        LWLockRelease(TwoPhaseStateLock);
 }
diff --git a/src/backend/access/transam/xact.c 
b/src/backend/access/transam/xact.c
index 50f092d7eb..c8a5b4610c 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -1522,8 +1522,7 @@ RecordTransactionCommit(void)
        XactLastRecEnd = 0;
 cleanup:
        /* Clean up local data */
-       if (rels)
-               pfree(rels);
+       pfree(rels);
        if (ndroppedstats)
                pfree(droppedstats);
 
@@ -1680,8 +1679,7 @@ AtSubCommit_childXids(void)
        s->parent->nChildXids = new_nChildXids;
 
        /* Release child's array to avoid leakage */
-       if (s->childXids != NULL)
-               pfree(s->childXids);
+       pfree(s->childXids);
        /* We must reset these to avoid double-free if fail later in commit */
        s->childXids = NULL;
        s->nChildXids = 0;
@@ -1806,8 +1804,7 @@ RecordTransactionAbort(bool isSubXact)
                XactLastRecEnd = 0;
 
        /* And clean up local data */
-       if (rels)
-               pfree(rels);
+       pfree(rels);
        if (ndroppedstats)
                pfree(droppedstats);
 
@@ -1885,8 +1882,7 @@ AtSubAbort_childXids(void)
         * AtSubCommit_childXids).  This means we'd better free the array
         * explicitly at abort to avoid leakage.
         */
-       if (s->childXids != NULL)
-               pfree(s->childXids);
+       pfree(s->childXids);
        s->childXids = NULL;
        s->nChildXids = 0;
        s->maxChildXids = 0;
@@ -5291,8 +5287,7 @@ PopTransaction(void)
        CurrentResourceOwner = s->parent->curTransactionOwner;
 
        /* Free the old child structure */
-       if (s->name)
-               pfree(s->name);
+       pfree(s->name);
        pfree(s);
 }
 
diff --git a/src/backend/access/transam/xlog.c 
b/src/backend/access/transam/xlog.c
index 87b243e0d4..6c876a6e18 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -4419,8 +4419,7 @@ XLOGShmemInit(void)
                /* Initialize local copy of WALInsertLocks */
                WALInsertLocks = XLogCtl->Insert.WALInsertLocks;
 
-               if (localControlFile)
-                       pfree(localControlFile);
+               pfree(localControlFile);
                return;
        }
        memset(XLogCtl, 0, sizeof(XLogCtlData));
diff --git a/src/backend/access/transam/xlogreader.c 
b/src/backend/access/transam/xlogreader.c
index f17e80948d..0b5f2768fc 100644
--- a/src/backend/access/transam/xlogreader.c
+++ b/src/backend/access/transam/xlogreader.c
@@ -176,8 +176,7 @@ XLogReaderFree(XLogReaderState *state)
                pfree(state->decode_buffer);
 
        pfree(state->errormsg_buf);
-       if (state->readRecordBuf)
-               pfree(state->readRecordBuf);
+       pfree(state->readRecordBuf);
        pfree(state->readBuf);
        pfree(state);
 }
@@ -220,8 +219,7 @@ allocate_recordbuf(XLogReaderState *state, uint32 reclength)
 
 #endif
 
-       if (state->readRecordBuf)
-               pfree(state->readRecordBuf);
+       pfree(state->readRecordBuf);
        state->readRecordBuf =
                (char *) palloc_extended(newSize, MCXT_ALLOC_NO_OOM);
        if (state->readRecordBuf == NULL)
diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
index 39768fa22b..e33d34a4a3 100644
--- a/src/backend/catalog/dependency.c
+++ b/src/backend/catalog/dependency.c
@@ -2821,8 +2821,7 @@ void
 free_object_addresses(ObjectAddresses *addrs)
 {
        pfree(addrs->refs);
-       if (addrs->extras)
-               pfree(addrs->extras);
+       pfree(addrs->extras);
        pfree(addrs);
 }
 
diff --git a/src/backend/catalog/pg_shdepend.c 
b/src/backend/catalog/pg_shdepend.c
index f2f227f887..111e689d4c 100644
--- a/src/backend/catalog/pg_shdepend.c
+++ b/src/backend/catalog/pg_shdepend.c
@@ -543,10 +543,8 @@ updateAclDependencies(Oid classId, Oid objectId, int32 
objsubId,
                table_close(sdepRel, RowExclusiveLock);
        }
 
-       if (oldmembers)
-               pfree(oldmembers);
-       if (newmembers)
-               pfree(newmembers);
+       pfree(oldmembers);
+       pfree(newmembers);
 }
 
 /*
diff --git a/src/backend/catalog/pg_subscription.c 
b/src/backend/catalog/pg_subscription.c
index a506fc3ec8..1fb333ccf5 100644
--- a/src/backend/catalog/pg_subscription.c
+++ b/src/backend/catalog/pg_subscription.c
@@ -160,8 +160,7 @@ FreeSubscription(Subscription *sub)
 {
        pfree(sub->name);
        pfree(sub->conninfo);
-       if (sub->slotname)
-               pfree(sub->slotname);
+       pfree(sub->slotname);
        list_free_deep(sub->publications);
        pfree(sub);
 }
diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c
index a7966fff83..6663e70861 100644
--- a/src/backend/commands/analyze.c
+++ b/src/backend/commands/analyze.c
@@ -717,8 +717,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
 
                        stats = index_vacuum_cleanup(&ivinfo, NULL);
 
-                       if (stats)
-                               pfree(stats);
+                       pfree(stats);
                }
        }
 
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index e078456b19..88d05a6edb 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -1061,8 +1061,7 @@ report_triggers(ResultRelInfo *rInfo, bool show_relname, 
ExplainState *es)
                        ExplainPropertyFloat("Calls", NULL, instr->ntuples, 0, 
es);
                }
 
-               if (conname)
-                       pfree(conname);
+               pfree(conname);
 
                ExplainCloseGroup("Trigger", NULL, true, es);
        }
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index 667f2a4cd1..605367d20d 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -301,8 +301,7 @@ CheckIndexCompatible(Oid oldId,
                ret = CompareOpclassOptions(opclassOptions,
                                                                        
indexInfo->ii_OpclassOptions, old_natts);
 
-               if (opclassOptions)
-                       pfree(opclassOptions);
+               pfree(opclassOptions);
        }
 
        /* Any change in exclusion operator selections breaks compatibility. */
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index 62a09fb131..349f297b7c 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -2194,12 +2194,9 @@ FreeTriggerDesc(TriggerDesc *trigdesc)
                                pfree(trigger->tgargs[trigger->tgnargs]);
                        pfree(trigger->tgargs);
                }
-               if (trigger->tgqual)
-                       pfree(trigger->tgqual);
-               if (trigger->tgoldtable)
-                       pfree(trigger->tgoldtable);
-               if (trigger->tgnewtable)
-                       pfree(trigger->tgnewtable);
+               pfree(trigger->tgqual);
+               pfree(trigger->tgoldtable);
+               pfree(trigger->tgnewtable);
                trigger++;
        }
        pfree(trigdesc->triggers);
@@ -5323,8 +5320,7 @@ AfterTriggerEndSubXact(bool isCommit)
                Assert(my_level < afterTriggers.maxtransdepth);
                /* If we saved a prior state, we don't need it anymore */
                state = afterTriggers.trans_stack[my_level].state;
-               if (state != NULL)
-                       pfree(state);
+               pfree(state);
                /* this avoids double pfree if error later: */
                afterTriggers.trans_stack[my_level].state = NULL;
                Assert(afterTriggers.query_depth ==
diff --git a/src/backend/executor/execTuples.c 
b/src/backend/executor/execTuples.c
index 06ac253ea0..6f1ccd424e 100644
--- a/src/backend/executor/execTuples.c
+++ b/src/backend/executor/execTuples.c
@@ -1211,10 +1211,8 @@ ExecResetTupleTable(List *tupleTable,    /* tuple table 
*/
                {
                        if (!TTS_FIXED(slot))
                        {
-                               if (slot->tts_values)
-                                       pfree(slot->tts_values);
-                               if (slot->tts_isnull)
-                                       pfree(slot->tts_isnull);
+                               pfree(slot->tts_values);
+                               pfree(slot->tts_isnull);
                        }
                        pfree(slot);
                }
@@ -1261,10 +1259,8 @@ ExecDropSingleTupleTableSlot(TupleTableSlot *slot)
                ReleaseTupleDesc(slot->tts_tupleDescriptor);
        if (!TTS_FIXED(slot))
        {
-               if (slot->tts_values)
-                       pfree(slot->tts_values);
-               if (slot->tts_isnull)
-                       pfree(slot->tts_isnull);
+               pfree(slot->tts_values);
+               pfree(slot->tts_isnull);
        }
        pfree(slot);
 }
@@ -1301,10 +1297,8 @@ ExecSetSlotDescriptor(TupleTableSlot *slot, /* slot to 
change */
        if (slot->tts_tupleDescriptor)
                ReleaseTupleDesc(slot->tts_tupleDescriptor);
 
-       if (slot->tts_values)
-               pfree(slot->tts_values);
-       if (slot->tts_isnull)
-               pfree(slot->tts_isnull);
+       pfree(slot->tts_values);
+       pfree(slot->tts_isnull);
 
        /*
         * Install the new descriptor; if it's refcounted, bump its refcount.
diff --git a/src/backend/executor/nodeGather.c 
b/src/backend/executor/nodeGather.c
index 1283d5b737..d984c15b22 100644
--- a/src/backend/executor/nodeGather.c
+++ b/src/backend/executor/nodeGather.c
@@ -404,8 +404,7 @@ ExecShutdownGatherWorkers(GatherState *node)
                ExecParallelFinish(node->pei);
 
        /* Flush local copy of reader array */
-       if (node->reader)
-               pfree(node->reader);
+       pfree(node->reader);
        node->reader = NULL;
 }
 
diff --git a/src/backend/executor/nodeGatherMerge.c 
b/src/backend/executor/nodeGatherMerge.c
index 3b1007f352..0e518a348d 100644
--- a/src/backend/executor/nodeGatherMerge.c
+++ b/src/backend/executor/nodeGatherMerge.c
@@ -327,8 +327,7 @@ ExecShutdownGatherMergeWorkers(GatherMergeState *node)
                ExecParallelFinish(node->pei);
 
        /* Flush local copy of reader array */
-       if (node->reader)
-               pfree(node->reader);
+       pfree(node->reader);
        node->reader = NULL;
 }
 
diff --git a/src/backend/executor/nodeTidscan.c 
b/src/backend/executor/nodeTidscan.c
index a1c6325d64..c370fb9f79 100644
--- a/src/backend/executor/nodeTidscan.c
+++ b/src/backend/executor/nodeTidscan.c
@@ -442,8 +442,7 @@ ExecTidScan(PlanState *pstate)
 void
 ExecReScanTidScan(TidScanState *node)
 {
-       if (node->tss_TidList)
-               pfree(node->tss_TidList);
+       pfree(node->tss_TidList);
        node->tss_TidList = NULL;
        node->tss_NumTids = 0;
        node->tss_TidPtr = -1;
diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c
index 29bc26669b..ac5e145e39 100644
--- a/src/backend/executor/spi.c
+++ b/src/backend/executor/spi.c
@@ -1454,8 +1454,7 @@ SPI_cursor_open(const char *name, SPIPlanPtr plan,
        portal = SPI_cursor_open_internal(name, plan, paramLI, read_only);
 
        /* done with the transient ParamListInfo */
-       if (paramLI)
-               pfree(paramLI);
+       pfree(paramLI);
 
        return portal;
 }
diff --git a/src/backend/executor/tstoreReceiver.c 
b/src/backend/executor/tstoreReceiver.c
index 0a19904b1f..8260a131a0 100644
--- a/src/backend/executor/tstoreReceiver.c
+++ b/src/backend/executor/tstoreReceiver.c
@@ -208,11 +208,9 @@ tstoreShutdownReceiver(DestReceiver *self)
        TStoreState *myState = (TStoreState *) self;
 
        /* Release workspace if any */
-       if (myState->outvalues)
-               pfree(myState->outvalues);
+       pfree(myState->outvalues);
        myState->outvalues = NULL;
-       if (myState->tofree)
-               pfree(myState->tofree);
+       pfree(myState->tofree);
        myState->tofree = NULL;
        if (myState->tupmap)
                free_conversion_map(myState->tupmap);
diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c
index 6c72d43beb..86362b0351 100644
--- a/src/backend/jit/llvm/llvmjit.c
+++ b/src/backend/jit/llvm/llvmjit.c
@@ -1094,8 +1094,7 @@ llvm_resolve_symbol(const char *symname, void *ctx)
                addr = (uintptr_t) LLVMSearchForAddressOfSymbol(symname);
 
        pfree(funcname);
-       if (modname)
-               pfree(modname);
+       pfree(modname);
 
        /* let LLVM will error out - should never happen */
        if (!addr)
diff --git a/src/backend/libpq/auth-scram.c b/src/backend/libpq/auth-scram.c
index ee7f52218a..a01e707aa5 100644
--- a/src/backend/libpq/auth-scram.c
+++ b/src/backend/libpq/auth-scram.c
@@ -486,8 +486,7 @@ pg_be_scram_build_secret(const char *password)
                                                                
SCRAM_DEFAULT_ITERATIONS, password,
                                                                &errstr);
 
-       if (prep_password)
-               pfree(prep_password);
+       pfree(prep_password);
 
        return result;
 }
@@ -548,8 +547,7 @@ scram_verify_plain_password(const char *username, const 
char *password,
                elog(ERROR, "could not compute server key: %s", errstr);
        }
 
-       if (prep_password)
-               pfree(prep_password);
+       pfree(prep_password);
 
        /*
         * Compare the secret's Server Key with the one computed from the
diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c
index 1545ff9f16..6495c9ce6b 100644
--- a/src/backend/libpq/auth.c
+++ b/src/backend/libpq/auth.c
@@ -791,8 +791,7 @@ CheckPasswordAuth(Port *port, const char **logdetail)
        else
                result = STATUS_ERROR;
 
-       if (shadow_pass)
-               pfree(shadow_pass);
+       pfree(shadow_pass);
        pfree(passwd);
 
        if (result == STATUS_OK)
@@ -847,8 +846,7 @@ CheckPWChallengeAuth(Port *port, const char **logdetail)
                auth_result = CheckSASLAuth(&pg_be_scram_mech, port, 
shadow_pass,
                                                                        
logdetail);
 
-       if (shadow_pass)
-               pfree(shadow_pass);
+       pfree(shadow_pass);
 
        /*
         * If get_role_password() returned error, return error, even if the
diff --git a/src/backend/libpq/be-secure-openssl.c 
b/src/backend/libpq/be-secure-openssl.c
index 55d4b29f7e..d0f3478a08 100644
--- a/src/backend/libpq/be-secure-openssl.c
+++ b/src/backend/libpq/be-secure-openssl.c
@@ -679,17 +679,11 @@ be_tls_close(Port *port)
                port->peer = NULL;
        }
 
-       if (port->peer_cn)
-       {
-               pfree(port->peer_cn);
-               port->peer_cn = NULL;
-       }
+       pfree(port->peer_cn);
+       port->peer_cn = NULL;
 
-       if (port->peer_dn)
-       {
-               pfree(port->peer_dn);
-               port->peer_dn = NULL;
-       }
+       pfree(port->peer_dn);
+       port->peer_dn = NULL;
 }
 
 ssize_t
diff --git a/src/backend/nodes/bitmapset.c b/src/backend/nodes/bitmapset.c
index 0a6c30e4eb..6e401c1902 100644
--- a/src/backend/nodes/bitmapset.c
+++ b/src/backend/nodes/bitmapset.c
@@ -202,13 +202,12 @@ bms_make_singleton(int x)
 /*
  * bms_free - free a bitmapset
  *
- * Same as pfree except for allowing NULL input
+ * Same as pfree
  */
 void
 bms_free(Bitmapset *a)
 {
-       if (a)
-               pfree(a);
+       pfree(a);
 }
 
 
diff --git a/src/backend/nodes/tidbitmap.c b/src/backend/nodes/tidbitmap.c
index a7a6b26668..c22fa2ec50 100644
--- a/src/backend/nodes/tidbitmap.c
+++ b/src/backend/nodes/tidbitmap.c
@@ -322,10 +322,8 @@ tbm_free(TIDBitmap *tbm)
 {
        if (tbm->pagetable)
                pagetable_destroy(tbm->pagetable);
-       if (tbm->spages)
-               pfree(tbm->spages);
-       if (tbm->schunks)
-               pfree(tbm->schunks);
+       pfree(tbm->spages);
+       pfree(tbm->schunks);
        pfree(tbm);
 }
 
diff --git a/src/backend/optimizer/plan/planner.c 
b/src/backend/optimizer/plan/planner.c
index cf9e0a74db..9e82aa2b4c 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -3059,8 +3059,7 @@ extract_rollup_sets(List *groupingSets)
        pfree(results);
        pfree(chains);
        for (i = 1; i <= num_sets; ++i)
-               if (adjacency[i])
-                       pfree(adjacency[i]);
+               pfree(adjacency[i]);
        pfree(adjacency);
        pfree(adjacency_buf);
        pfree(orig_sets);
diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l
index 882e081aae..2b3e6ec810 100644
--- a/src/backend/parser/scan.l
+++ b/src/backend/parser/scan.l
@@ -1433,6 +1433,5 @@ core_yyrealloc(void *ptr, yy_size_t bytes, core_yyscan_t 
yyscanner)
 void
 core_yyfree(void *ptr, core_yyscan_t yyscanner)
 {
-       if (ptr)
-               pfree(ptr);
+       pfree(ptr);
 }
diff --git a/src/backend/postmaster/autovacuum.c 
b/src/backend/postmaster/autovacuum.c
index 70a9176c54..a9edc96027 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -2511,12 +2511,9 @@ do_autovacuum(void)
 
                /* be tidy */
 deleted:
-               if (tab->at_datname != NULL)
-                       pfree(tab->at_datname);
-               if (tab->at_nspname != NULL)
-                       pfree(tab->at_nspname);
-               if (tab->at_relname != NULL)
-                       pfree(tab->at_relname);
+               pfree(tab->at_datname);
+               pfree(tab->at_nspname);
+               pfree(tab->at_relname);
                pfree(tab);
 
                /*
@@ -2702,12 +2699,9 @@ perform_work_item(AutoVacuumWorkItem *workitem)
 
        /* be tidy */
 deleted2:
-       if (cur_datname)
-               pfree(cur_datname);
-       if (cur_nspname)
-               pfree(cur_nspname);
-       if (cur_relname)
-               pfree(cur_relname);
+       pfree(cur_datname);
+       pfree(cur_nspname);
+       pfree(cur_relname);
 }
 
 /*
diff --git a/src/backend/postmaster/checkpointer.c 
b/src/backend/postmaster/checkpointer.c
index 5fc076fc14..f490e106a9 100644
--- a/src/backend/postmaster/checkpointer.c
+++ b/src/backend/postmaster/checkpointer.c
@@ -1308,8 +1308,7 @@ AbsorbSyncRequests(void)
 
        END_CRIT_SECTION();
 
-       if (requests)
-               pfree(requests);
+       pfree(requests);
 }
 
 /*
diff --git a/src/backend/postmaster/syslogger.c 
b/src/backend/postmaster/syslogger.c
index d6d02e3c63..5b3db40bee 100644
--- a/src/backend/postmaster/syslogger.c
+++ b/src/backend/postmaster/syslogger.c
@@ -1329,8 +1329,7 @@ logfile_rotate_dest(bool time_based_rotation, int 
size_rotation_for,
                if (*logFile != NULL)
                        fclose(*logFile);
                *logFile = NULL;
-               if (*last_file_name != NULL)
-                       pfree(*last_file_name);
+               pfree(*last_file_name);
                *last_file_name = NULL;
                return true;
        }
@@ -1386,8 +1385,7 @@ logfile_rotate_dest(bool time_based_rotation, int 
size_rotation_for,
                        rotation_disabled = true;
                }
 
-               if (filename)
-                       pfree(filename);
+               pfree(filename);
                return false;
        }
 
@@ -1397,8 +1395,7 @@ logfile_rotate_dest(bool time_based_rotation, int 
size_rotation_for,
        *logFile = fh;
 
        /* instead of pfree'ing filename, remember it for next time */
-       if (*last_file_name != NULL)
-               pfree(*last_file_name);
+       pfree(*last_file_name);
        *last_file_name = filename;
 
        return true;
diff --git a/src/backend/replication/logical/reorderbuffer.c 
b/src/backend/replication/logical/reorderbuffer.c
index 1c21a1d14b..5628fff12e 100644
--- a/src/backend/replication/logical/reorderbuffer.c
+++ b/src/backend/replication/logical/reorderbuffer.c
@@ -437,23 +437,14 @@ ReorderBufferReturnTXN(ReorderBuffer *rb, 
ReorderBufferTXN *txn)
 
        /* free data that's contained */
 
-       if (txn->gid != NULL)
-       {
-               pfree(txn->gid);
-               txn->gid = NULL;
-       }
+       pfree(txn->gid);
+       txn->gid = NULL;
 
-       if (txn->tuplecid_hash != NULL)
-       {
-               hash_destroy(txn->tuplecid_hash);
-               txn->tuplecid_hash = NULL;
-       }
+       hash_destroy(txn->tuplecid_hash);
+       txn->tuplecid_hash = NULL;
 
-       if (txn->invalidations)
-       {
-               pfree(txn->invalidations);
-               txn->invalidations = NULL;
-       }
+       pfree(txn->invalidations);
+       txn->invalidations = NULL;
 
        /* Reset the toast hash */
        ReorderBufferToastReset(rb, txn);
@@ -508,16 +499,13 @@ ReorderBufferReturnChange(ReorderBuffer *rb, 
ReorderBufferChange *change,
                        }
                        break;
                case REORDER_BUFFER_CHANGE_MESSAGE:
-                       if (change->data.msg.prefix != NULL)
-                               pfree(change->data.msg.prefix);
+                       pfree(change->data.msg.prefix);
                        change->data.msg.prefix = NULL;
-                       if (change->data.msg.message != NULL)
-                               pfree(change->data.msg.message);
+                       pfree(change->data.msg.message);
                        change->data.msg.message = NULL;
                        break;
                case REORDER_BUFFER_CHANGE_INVALIDATION:
-                       if (change->data.inval.invalidations)
-                               pfree(change->data.inval.invalidations);
+                       pfree(change->data.inval.invalidations);
                        change->data.inval.invalidations = NULL;
                        break;
                case REORDER_BUFFER_CHANGE_INTERNAL_SNAPSHOT:
@@ -4865,8 +4853,7 @@ ReorderBufferToastReset(ReorderBuffer *rb, 
ReorderBufferTXN *txn)
        {
                dlist_mutable_iter it;
 
-               if (ent->reconstructed != NULL)
-                       pfree(ent->reconstructed);
+               pfree(ent->reconstructed);
 
                dlist_foreach_modify(it, &ent->chunks)
                {
diff --git a/src/backend/replication/logical/snapbuild.c 
b/src/backend/replication/logical/snapbuild.c
index 1ff2c12240..08c98e6fbc 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -1805,10 +1805,8 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
        ReorderBufferSetRestartPoint(builder->reorder,
                                                                 
builder->last_serialized_snapshot);
        /* be tidy */
-       if (ondisk)
-               pfree(ondisk);
-       if (catchange_xip)
-               pfree(catchange_xip);
+       pfree(ondisk);
+       pfree(catchange_xip);
 }
 
 /*
@@ -1973,10 +1971,8 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn)
        return true;
 
 snapshot_not_interesting:
-       if (ondisk.builder.committed.xip != NULL)
-               pfree(ondisk.builder.committed.xip);
-       if (ondisk.builder.catchange.xip != NULL)
-               pfree(ondisk.builder.catchange.xip);
+       pfree(ondisk.builder.committed.xip);
+       pfree(ondisk.builder.catchange.xip);
        return false;
 }
 
diff --git a/src/backend/replication/logical/worker.c 
b/src/backend/replication/logical/worker.c
index 5f8c541763..7468938960 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -3464,9 +3464,7 @@ stream_write_change(char action, StringInfo s)
 static inline void
 cleanup_subxact_info()
 {
-       if (subxact_data.subxacts)
-               pfree(subxact_data.subxacts);
-
+       pfree(subxact_data.subxacts);
        subxact_data.subxacts = NULL;
        subxact_data.subxact_last = InvalidTransactionId;
        subxact_data.nsubxacts = 0;
diff --git a/src/backend/replication/walreceiver.c 
b/src/backend/replication/walreceiver.c
index 8604fd4bc2..5e8979f9dd 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -311,11 +311,8 @@ WalReceiverMain(void)
        walrcv->ready_to_display = true;
        SpinLockRelease(&walrcv->mutex);
 
-       if (tmp_conninfo)
-               pfree(tmp_conninfo);
-
-       if (sender_host)
-               pfree(sender_host);
+       pfree(tmp_conninfo);
+       pfree(sender_host);
 
        first_stream = true;
        for (;;)
diff --git a/src/backend/storage/buffer/freelist.c 
b/src/backend/storage/buffer/freelist.c
index 990e081aae..417faa6440 100644
--- a/src/backend/storage/buffer/freelist.c
+++ b/src/backend/storage/buffer/freelist.c
@@ -595,9 +595,7 @@ GetAccessStrategy(BufferAccessStrategyType btype)
 void
 FreeAccessStrategy(BufferAccessStrategy strategy)
 {
-       /* don't crash if called on a "default" strategy */
-       if (strategy != NULL)
-               pfree(strategy);
+       pfree(strategy);
 }
 
 /*
diff --git a/src/backend/storage/ipc/shm_mq.c b/src/backend/storage/ipc/shm_mq.c
index 8ca24de8d6..e77d8db710 100644
--- a/src/backend/storage/ipc/shm_mq.c
+++ b/src/backend/storage/ipc/shm_mq.c
@@ -860,8 +860,7 @@ shm_mq_detach(shm_mq_handle *mqh)
                                                         
PointerGetDatum(mqh->mqh_queue));
 
        /* Release local memory associated with handle. */
-       if (mqh->mqh_buffer != NULL)
-               pfree(mqh->mqh_buffer);
+       pfree(mqh->mqh_buffer);
        pfree(mqh);
 }
 
diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c
index 5f5803f681..12a375fac9 100644
--- a/src/backend/storage/lmgr/lock.c
+++ b/src/backend/storage/lmgr/lock.c
@@ -1374,8 +1374,7 @@ RemoveLocalLock(LOCALLOCK *locallock)
                        ResourceOwnerForgetLock(locallock->lockOwners[i].owner, 
locallock);
        }
        locallock->numLockOwners = 0;
-       if (locallock->lockOwners != NULL)
-               pfree(locallock->lockOwners);
+       pfree(locallock->lockOwners);
        locallock->lockOwners = NULL;
 
        if (locallock->holdsStrongLockCount)
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 7bec4e4ff5..553d471c62 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -2527,8 +2527,7 @@ bind_param_error_callback(void *arg)
                                           data->paramno + 1);
        }
 
-       if (quotedval)
-               pfree(quotedval);
+       pfree(quotedval);
 }
 
 /*
diff --git a/src/backend/tsearch/dict_thesaurus.c 
b/src/backend/tsearch/dict_thesaurus.c
index b8c08bcf7b..ad838608ba 100644
--- a/src/backend/tsearch/dict_thesaurus.c
+++ b/src/backend/tsearch/dict_thesaurus.c
@@ -456,8 +456,7 @@ compileTheLexeme(DictThesaurus *d)
                pfree(d->wrds[i].entries);
        }
 
-       if (d->wrds)
-               pfree(d->wrds);
+       pfree(d->wrds);
        d->wrds = newwrds;
        d->nwrds = nnw;
        d->ntwrds = tnm;
@@ -481,8 +480,7 @@ compileTheLexeme(DictThesaurus *d)
                                else
                                        pfree(ptrwrds->entries);
 
-                               if (ptrwrds->lexeme)
-                                       pfree(ptrwrds->lexeme);
+                               pfree(ptrwrds->lexeme);
                        }
                        else
                        {
@@ -575,8 +573,7 @@ compileTheSubstitute(DictThesaurus *d)
                                                                inptr->lexeme, 
i + 1)));
                        }
 
-                       if (inptr->lexeme)
-                               pfree(inptr->lexeme);
+                       pfree(inptr->lexeme);
                        inptr++;
                }
 
diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c
index f07321b61d..372e3c0fe0 100644
--- a/src/backend/tsearch/spell.c
+++ b/src/backend/tsearch/spell.c
@@ -1322,8 +1322,7 @@ NIImportOOAffixes(IspellDict *Conf, const char *filename)
 
                fields_read = parse_ooaffentry(recoded, type, sflag, find, 
repl, mask);
 
-               if (ptype)
-                       pfree(ptype);
+               pfree(ptype);
                ptype = lowerstr_ctx(Conf, type);
 
                /* First try to parse AF parameter (alias compression) */
@@ -1427,8 +1426,7 @@ NIImportOOAffixes(IspellDict *Conf, const char *filename)
        }
 
        tsearch_readline_end(&trst);
-       if (ptype)
-               pfree(ptype);
+       pfree(ptype);
 }
 
 /*
diff --git a/src/backend/tsearch/to_tsany.c b/src/backend/tsearch/to_tsany.c
index edeffacc2d..6a1f4f4b40 100644
--- a/src/backend/tsearch/to_tsany.c
+++ b/src/backend/tsearch/to_tsany.c
@@ -234,8 +234,7 @@ make_tsvector(ParsedText *prs)
                ptr++;
        }
 
-       if (prs->words)
-               pfree(prs->words);
+       pfree(prs->words);
 
        return in;
 }
diff --git a/src/backend/tsearch/wparser_def.c 
b/src/backend/tsearch/wparser_def.c
index 826027844e..b6724ae7b3 100644
--- a/src/backend/tsearch/wparser_def.c
+++ b/src/backend/tsearch/wparser_def.c
@@ -378,10 +378,8 @@ TParserClose(TParser *prs)
                prs->state = ptr;
        }
 
-       if (prs->wstr)
-               pfree(prs->wstr);
-       if (prs->pgwstr)
-               pfree(prs->pgwstr);
+       pfree(prs->wstr);
+       pfree(prs->pgwstr);
 
 #ifdef WPARSER_TRACE
        fprintf(stderr, "closing parser\n");
diff --git a/src/backend/utils/activity/pgstat_shmem.c 
b/src/backend/utils/activity/pgstat_shmem.c
index 89060ef29a..37b2ce36ad 100644
--- a/src/backend/utils/activity/pgstat_shmem.c
+++ b/src/backend/utils/activity/pgstat_shmem.c
@@ -563,8 +563,7 @@ pgstat_release_entry_ref(PgStat_HashKey key, 
PgStat_EntryRef *entry_ref,
        if (!pgstat_entry_ref_hash_delete(pgStatEntryRefHash, key))
                elog(ERROR, "entry ref vanished before deletion");
 
-       if (entry_ref)
-               pfree(entry_ref);
+       pfree(entry_ref);
 }
 
 bool
diff --git a/src/backend/utils/adt/jsonb_util.c 
b/src/backend/utils/adt/jsonb_util.c
index 5318eda9cf..bc26bb8117 100644
--- a/src/backend/utils/adt/jsonb_util.c
+++ b/src/backend/utils/adt/jsonb_util.c
@@ -1281,10 +1281,8 @@ JsonbDeepContains(JsonbIterator **val, JsonbIterator 
**mContained)
 
                                        contains = JsonbDeepContains(&nestval, 
&nestContained);
 
-                                       if (nestval)
-                                               pfree(nestval);
-                                       if (nestContained)
-                                               pfree(nestContained);
+                                       pfree(nestval);
+                                       pfree(nestContained);
                                        if (contains)
                                                break;
                                }
diff --git a/src/backend/utils/adt/jsonpath_scan.l 
b/src/backend/utils/adt/jsonpath_scan.l
index 4351f6ec98..2ed8bb0bc0 100644
--- a/src/backend/utils/adt/jsonpath_scan.l
+++ b/src/backend/utils/adt/jsonpath_scan.l
@@ -614,6 +614,5 @@ jsonpath_yyrealloc(void *ptr, yy_size_t bytes)
 void
 jsonpath_yyfree(void *ptr)
 {
-       if (ptr)
-               pfree(ptr);
+       pfree(ptr);
 }
diff --git a/src/backend/utils/adt/like_support.c 
b/src/backend/utils/adt/like_support.c
index 65a57fc3c4..a16c2f76a7 100644
--- a/src/backend/utils/adt/like_support.c
+++ b/src/backend/utils/adt/like_support.c
@@ -1687,8 +1687,7 @@ make_greater_string(const Const *str_const, FmgrInfo 
*ltproc, Oid collation)
                                                                                
           workstr_const->constvalue)))
                        {
                                /* Successfully made a string larger than 
cmpstr */
-                               if (cmptxt)
-                                       pfree(cmptxt);
+                               pfree(cmptxt);
                                pfree(workstr);
                                return workstr_const;
                        }
@@ -1707,8 +1706,7 @@ make_greater_string(const Const *str_const, FmgrInfo 
*ltproc, Oid collation)
        }
 
        /* Failed... */
-       if (cmptxt)
-               pfree(cmptxt);
+       pfree(cmptxt);
        pfree(workstr);
 
        return NULL;
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 920a63b008..2ffafcc1f5 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -477,10 +477,7 @@ static void dump_var(const char *str, NumericVar *var);
 #define digitbuf_alloc(ndigits)  \
        ((NumericDigit *) palloc((ndigits) * sizeof(NumericDigit)))
 #define digitbuf_free(buf)     \
-       do { \
-                if ((buf) != NULL) \
-                        pfree(buf); \
-       } while (0)
+       pfree(buf)
 
 #define init_var(v)            memset(v, 0, sizeof(NumericVar))
 
diff --git a/src/backend/utils/adt/pg_locale.c 
b/src/backend/utils/adt/pg_locale.c
index 1a047a97d7..b5f141d349 100644
--- a/src/backend/utils/adt/pg_locale.c
+++ b/src/backend/utils/adt/pg_locale.c
@@ -722,8 +722,7 @@ cache_single_string(char **dst, const char *src, int 
encoding)
        /* Store the string in long-lived storage, replacing any previous value 
*/
        olddst = *dst;
        *dst = MemoryContextStrdup(TopMemoryContext, ptr);
-       if (olddst)
-               pfree(olddst);
+       pfree(olddst);
 
        /* Might as well clean up any palloc'd conversion result, too */
        if (ptr != src)
diff --git a/src/backend/utils/adt/tsvector_op.c 
b/src/backend/utils/adt/tsvector_op.c
index 1786c18f89..41f4156373 100644
--- a/src/backend/utils/adt/tsvector_op.c
+++ b/src/backend/utils/adt/tsvector_op.c
@@ -1377,8 +1377,7 @@ checkcondition_str(void *checkval, QueryOperand *val, 
ExecPhraseData *data)
                                                /* forget any previous 
positions */
                                                npos = 0;
                                                /* don't leak storage */
-                                               if (allpos)
-                                                       pfree(allpos);
+                                               pfree(allpos);
                                                break;
                                        }
 
diff --git a/src/backend/utils/adt/tsvector_parser.c 
b/src/backend/utils/adt/tsvector_parser.c
index e2460d393a..4215549e3a 100644
--- a/src/backend/utils/adt/tsvector_parser.c
+++ b/src/backend/utils/adt/tsvector_parser.c
@@ -99,7 +99,7 @@ do { \
                *pos_ptr = pos; \
                *poslen = npos; \
        } \
-       else if (pos != NULL) \
+       else \
                pfree(pos); \
        \
        if (strval != NULL) \
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index 8539cef024..13f343cec9 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -2621,8 +2621,7 @@ varstr_abbrev_convert(Datum original, SortSupport ssup)
                memcpy(pres, sss->buf2, Min(sizeof(Datum), bsize));
 
 #ifdef USE_ICU
-               if (uchar)
-                       pfree(uchar);
+               pfree(uchar);
 #endif
        }
 
@@ -5919,10 +5918,8 @@ text_format(PG_FUNCTION_ARGS)
        }
 
        /* Don't need deconstruct_array results anymore. */
-       if (elements != NULL)
-               pfree(elements);
-       if (nulls != NULL)
-               pfree(nulls);
+       pfree(elements);
+       pfree(nulls);
 
        /* Generate results. */
        result = cstring_to_text_with_len(str.data, str.len);
diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c
index 60a85c4697..82da805250 100644
--- a/src/backend/utils/adt/xml.c
+++ b/src/backend/utils/adt/xml.c
@@ -1677,9 +1677,7 @@ xml_repalloc(void *ptr, size_t size)
 static void
 xml_pfree(void *ptr)
 {
-       /* At least some parts of libxml assume xmlFree(NULL) is allowed */
-       if (ptr)
-               pfree(ptr);
+       pfree(ptr);
 }
 
 
diff --git a/src/backend/utils/cache/attoptcache.c 
b/src/backend/utils/cache/attoptcache.c
index 9e252a0891..3e34baf168 100644
--- a/src/backend/utils/cache/attoptcache.c
+++ b/src/backend/utils/cache/attoptcache.c
@@ -59,8 +59,7 @@ InvalidateAttoptCacheCallback(Datum arg, int cacheid, uint32 
hashvalue)
        hash_seq_init(&status, AttoptCacheHash);
        while ((attopt = (AttoptCacheEntry *) hash_seq_search(&status)) != NULL)
        {
-               if (attopt->opts)
-                       pfree(attopt->opts);
+               pfree(attopt->opts);
                if (hash_search(AttoptCacheHash,
                                                (void *) &attopt->key,
                                                HASH_REMOVE,
diff --git a/src/backend/utils/cache/lsyscache.c 
b/src/backend/utils/cache/lsyscache.c
index a16a63f495..75233060ff 100644
--- a/src/backend/utils/cache/lsyscache.c
+++ b/src/backend/utils/cache/lsyscache.c
@@ -3305,14 +3305,11 @@ void
 free_attstatsslot(AttStatsSlot *sslot)
 {
        /* The values[] array was separately palloc'd by deconstruct_array */
-       if (sslot->values)
-               pfree(sslot->values);
+       pfree(sslot->values);
        /* The numbers[] array points into numbers_arr, do not pfree it */
        /* Free the detoasted array objects, if any */
-       if (sslot->values_arr)
-               pfree(sslot->values_arr);
-       if (sslot->numbers_arr)
-               pfree(sslot->numbers_arr);
+       pfree(sslot->values_arr);
+       pfree(sslot->numbers_arr);
 }
 
 /*                             ---------- PG_NAMESPACE CACHE ----------        
                         */
diff --git a/src/backend/utils/cache/relcache.c 
b/src/backend/utils/cache/relcache.c
index 00dc0f2403..1a5e746747 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -2230,8 +2230,7 @@ RelationReloadIndexInfo(Relation relation)
        RelationCloseSmgr(relation);
 
        /* Must free any AM cached data upon relcache flush */
-       if (relation->rd_amcache)
-               pfree(relation->rd_amcache);
+       pfree(relation->rd_amcache);
        relation->rd_amcache = NULL;
 
        /*
@@ -2261,8 +2260,7 @@ RelationReloadIndexInfo(Relation relation)
        relp = (Form_pg_class) GETSTRUCT(pg_class_tuple);
        memcpy(relation->rd_rel, relp, CLASS_TUPLE_SIZE);
        /* Reload reloptions in case they changed */
-       if (relation->rd_options)
-               pfree(relation->rd_options);
+       pfree(relation->rd_options);
        RelationParseRelOptions(relation, pg_class_tuple);
        /* done with pg_class tuple */
        heap_freetuple(pg_class_tuple);
@@ -2417,8 +2415,7 @@ RelationDestroyRelation(Relation relation, bool 
remember_tupdesc)
         * Free all the subsidiary data structures of the relcache entry, then 
the
         * entry itself.
         */
-       if (relation->rd_rel)
-               pfree(relation->rd_rel);
+       pfree(relation->rd_rel);
        /* can't use DecrTupleDescRefCount here */
        Assert(relation->rd_att->tdrefcount > 0);
        if (--relation->rd_att->tdrefcount == 0)
@@ -2444,16 +2441,11 @@ RelationDestroyRelation(Relation relation, bool 
remember_tupdesc)
        bms_free(relation->rd_keyattr);
        bms_free(relation->rd_pkattr);
        bms_free(relation->rd_idattr);
-       if (relation->rd_pubdesc)
-               pfree(relation->rd_pubdesc);
-       if (relation->rd_options)
-               pfree(relation->rd_options);
-       if (relation->rd_indextuple)
-               pfree(relation->rd_indextuple);
-       if (relation->rd_amcache)
-               pfree(relation->rd_amcache);
-       if (relation->rd_fdwroutine)
-               pfree(relation->rd_fdwroutine);
+       pfree(relation->rd_pubdesc);
+       pfree(relation->rd_options);
+       pfree(relation->rd_indextuple);
+       pfree(relation->rd_amcache);
+       pfree(relation->rd_fdwroutine);
        if (relation->rd_indexcxt)
                MemoryContextDelete(relation->rd_indexcxt);
        if (relation->rd_rulescxt)
@@ -2513,8 +2505,7 @@ RelationClearRelation(Relation relation, bool rebuild)
        RelationCloseSmgr(relation);
 
        /* Free AM cached data, if any */
-       if (relation->rd_amcache)
-               pfree(relation->rd_amcache);
+       pfree(relation->rd_amcache);
        relation->rd_amcache = NULL;
 
        /*
@@ -4202,8 +4193,7 @@ RelationCacheInitializePhase3(void)
                        memcpy((char *) relation->rd_rel, (char *) relp, 
CLASS_TUPLE_SIZE);
 
                        /* Update rd_options while we have the tuple */
-                       if (relation->rd_options)
-                               pfree(relation->rd_options);
+                       pfree(relation->rd_options);
                        RelationParseRelOptions(relation, htup);
 
                        /*
@@ -5742,11 +5732,8 @@ RelationBuildPublicationDesc(Relation relation, 
PublicationDesc *pubdesc)
                        break;
        }
 
-       if (relation->rd_pubdesc)
-       {
-               pfree(relation->rd_pubdesc);
-               relation->rd_pubdesc = NULL;
-       }
+       pfree(relation->rd_pubdesc);
+       relation->rd_pubdesc = NULL;
 
        /* Now save copy of the descriptor in the relcache entry. */
        oldcxt = MemoryContextSwitchTo(CacheMemoryContext);
@@ -5829,8 +5816,7 @@ RelationGetIndexAttOptions(Relation relation, bool copy)
 
                        opts[i] = index_opclass_options(relation, i + 1, 
attoptions, false);
 
-                       if (attoptions != (Datum) 0)
-                               pfree(DatumGetPointer(attoptions));
+                       pfree(DatumGetPointer(attoptions));
                }
        }
 
@@ -5843,10 +5829,7 @@ RelationGetIndexAttOptions(Relation relation, bool copy)
                return opts;
 
        for (i = 0; i < natts; i++)
-       {
-               if (opts[i])
-                       pfree(opts[i]);
-       }
+               pfree(opts[i]);
 
        pfree(opts);
 
diff --git a/src/backend/utils/cache/spccache.c 
b/src/backend/utils/cache/spccache.c
index 5609246c2f..db4e997a96 100644
--- a/src/backend/utils/cache/spccache.c
+++ b/src/backend/utils/cache/spccache.c
@@ -59,8 +59,7 @@ InvalidateTableSpaceCacheCallback(Datum arg, int cacheid, 
uint32 hashvalue)
        hash_seq_init(&status, TableSpaceCacheHash);
        while ((spc = (TableSpaceCacheEntry *) hash_seq_search(&status)) != 
NULL)
        {
-               if (spc->opts)
-                       pfree(spc->opts);
+               pfree(spc->opts);
                if (hash_search(TableSpaceCacheHash,
                                                (void *) &spc->oid,
                                                HASH_REMOVE,
diff --git a/src/backend/utils/cache/ts_cache.c 
b/src/backend/utils/cache/ts_cache.c
index 24808dfbb1..1fe52a8359 100644
--- a/src/backend/utils/cache/ts_cache.c
+++ b/src/backend/utils/cache/ts_cache.c
@@ -449,8 +449,7 @@ lookup_ts_config_cache(Oid cfgId)
                        if (entry->map)
                        {
                                for (i = 0; i < entry->lenmap; i++)
-                                       if (entry->map[i].dictIds)
-                                               pfree(entry->map[i].dictIds);
+                                       pfree(entry->map[i].dictIds);
                                pfree(entry->map);
                        }
                }
diff --git a/src/backend/utils/cache/typcache.c 
b/src/backend/utils/cache/typcache.c
index 808f9ebd0d..20423bab72 100644
--- a/src/backend/utils/cache/typcache.c
+++ b/src/backend/utils/cache/typcache.c
@@ -2690,8 +2690,7 @@ load_enum_cache_data(TypeCacheEntry *tcache)
        bms_free(bitmap);
 
        /* And link the finished cache struct into the typcache */
-       if (tcache->enumData != NULL)
-               pfree(tcache->enumData);
+       pfree(tcache->enumData);
        tcache->enumData = enumdata;
 }
 
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 95f32de4e2..572b6923e8 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -592,30 +592,18 @@ errfinish(const char *filename, int lineno, const char 
*funcname)
        EmitErrorReport();
 
        /* Now free up subsidiary data attached to stack entry, and release it 
*/
-       if (edata->message)
-               pfree(edata->message);
-       if (edata->detail)
-               pfree(edata->detail);
-       if (edata->detail_log)
-               pfree(edata->detail_log);
-       if (edata->hint)
-               pfree(edata->hint);
-       if (edata->context)
-               pfree(edata->context);
-       if (edata->backtrace)
-               pfree(edata->backtrace);
-       if (edata->schema_name)
-               pfree(edata->schema_name);
-       if (edata->table_name)
-               pfree(edata->table_name);
-       if (edata->column_name)
-               pfree(edata->column_name);
-       if (edata->datatype_name)
-               pfree(edata->datatype_name);
-       if (edata->constraint_name)
-               pfree(edata->constraint_name);
-       if (edata->internalquery)
-               pfree(edata->internalquery);
+       pfree(edata->message);
+       pfree(edata->detail);
+       pfree(edata->detail_log);
+       pfree(edata->hint);
+       pfree(edata->context);
+       pfree(edata->backtrace);
+       pfree(edata->schema_name);
+       pfree(edata->table_name);
+       pfree(edata->column_name);
+       pfree(edata->datatype_name);
+       pfree(edata->constraint_name);
+       pfree(edata->internalquery);
 
        errordata_stack_depth--;
 
@@ -845,8 +833,7 @@ errcode_for_socket_access(void)
                        enlargeStringInfo(&buf, needed); \
                } \
                /* Save the completed message into the stack item */ \
-               if (edata->targetfield) \
-                       pfree(edata->targetfield); \
+               pfree(edata->targetfield); \
                edata->targetfield = pstrdup(buf.data); \
                pfree(buf.data); \
        }
@@ -884,8 +871,7 @@ errcode_for_socket_access(void)
                        enlargeStringInfo(&buf, needed); \
                } \
                /* Save the completed message into the stack item */ \
-               if (edata->targetfield) \
-                       pfree(edata->targetfield); \
+               pfree(edata->targetfield); \
                edata->targetfield = pstrdup(buf.data); \
                pfree(buf.data); \
        }
@@ -1320,11 +1306,8 @@ internalerrquery(const char *query)
        /* we don't bother incrementing recursion_depth */
        CHECK_STACK_DEPTH();
 
-       if (edata->internalquery)
-       {
-               pfree(edata->internalquery);
-               edata->internalquery = NULL;
-       }
+       pfree(edata->internalquery);
+       edata->internalquery = NULL;
 
        if (query)
                edata->internalquery = 
MemoryContextStrdup(edata->assoc_context, query);
@@ -1610,30 +1593,18 @@ CopyErrorData(void)
 void
 FreeErrorData(ErrorData *edata)
 {
-       if (edata->message)
-               pfree(edata->message);
-       if (edata->detail)
-               pfree(edata->detail);
-       if (edata->detail_log)
-               pfree(edata->detail_log);
-       if (edata->hint)
-               pfree(edata->hint);
-       if (edata->context)
-               pfree(edata->context);
-       if (edata->backtrace)
-               pfree(edata->backtrace);
-       if (edata->schema_name)
-               pfree(edata->schema_name);
-       if (edata->table_name)
-               pfree(edata->table_name);
-       if (edata->column_name)
-               pfree(edata->column_name);
-       if (edata->datatype_name)
-               pfree(edata->datatype_name);
-       if (edata->constraint_name)
-               pfree(edata->constraint_name);
-       if (edata->internalquery)
-               pfree(edata->internalquery);
+       pfree(edata->message);
+       pfree(edata->detail);
+       pfree(edata->detail_log);
+       pfree(edata->hint);
+       pfree(edata->context);
+       pfree(edata->backtrace);
+       pfree(edata->schema_name);
+       pfree(edata->table_name);
+       pfree(edata->column_name);
+       pfree(edata->datatype_name);
+       pfree(edata->constraint_name);
+       pfree(edata->internalquery);
        pfree(edata);
 }
 
diff --git a/src/backend/utils/init/miscinit.c 
b/src/backend/utils/init/miscinit.c
index bd973ba613..3a6e2b3028 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -1667,8 +1667,7 @@ load_libraries(const char *libraries, const char 
*gucname, bool restricted)
                load_file(filename, restricted);
                ereport(DEBUG1,
                                (errmsg_internal("loaded library \"%s\"", 
filename)));
-               if (expanded)
-                       pfree(expanded);
+               pfree(expanded);
        }
 
        list_free_deep(elemlist);
diff --git a/src/backend/utils/mb/stringinfo_mb.c 
b/src/backend/utils/mb/stringinfo_mb.c
index 4401dfc47a..25e872fa99 100644
--- a/src/backend/utils/mb/stringinfo_mb.c
+++ b/src/backend/utils/mb/stringinfo_mb.c
@@ -81,6 +81,5 @@ appendStringInfoStringQuoted(StringInfo str, const char *s, 
int maxlen)
        else
                appendStringInfo(str, "%s'", chunk_copy_start);
 
-       if (copy)
-               pfree(copy);
+       pfree(copy);
 }
diff --git a/src/backend/utils/misc/guc-file.l 
b/src/backend/utils/misc/guc-file.l
index ce5633844c..6d0e7b4dc5 100644
--- a/src/backend/utils/misc/guc-file.l
+++ b/src/backend/utils/misc/guc-file.l
@@ -478,8 +478,7 @@ ProcessConfigFileInternal(GucContext context, bool 
applySettings, int elevel)
                        set_config_sourcefile(item->name, item->filename,
                                                                  
item->sourceline);
 
-               if (pre_value)
-                       pfree(pre_value);
+               pfree(pre_value);
        }
 
        /* Remember when we last successfully loaded the config file. */
@@ -883,10 +882,8 @@ ParseConfigFp(FILE *fp, const char *config_file, int 
depth, int elevel,
 
 parse_error:
                /* release storage if we allocated any on this line */
-               if (opt_name)
-                       pfree(opt_name);
-               if (opt_value)
-                       pfree(opt_value);
+               pfree(opt_name);
+               pfree(opt_value);
 
                /* report the error */
                if (token == GUC_EOL || token == 0)
@@ -1119,14 +1116,10 @@ FreeConfigVariables(ConfigVariable *list)
 static void
 FreeConfigVariable(ConfigVariable *item)
 {
-       if (item->name)
-               pfree(item->name);
-       if (item->value)
-               pfree(item->value);
-       if (item->errmsg)
-               pfree(item->errmsg);
-       if (item->filename)
-               pfree(item->filename);
+       pfree(item->name);
+       pfree(item->value);
+       pfree(item->errmsg);
+       pfree(item->filename);
        pfree(item);
 }
 
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 9fbbfb1be5..ada7bc6b90 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -7513,8 +7513,7 @@ parse_and_validate_value(struct config_generic *record,
                                                                        name, 
value),
                                                         hintmsg ? 
errhint("%s", _(hintmsg)) : 0));
 
-                                       if (hintmsg)
-                                               pfree(hintmsg);
+                                       pfree(hintmsg);
                                        return false;
                                }
 
diff --git a/src/backend/utils/resowner/resowner.c 
b/src/backend/utils/resowner/resowner.c
index ceb4b0e3f7..1dbf41396b 100644
--- a/src/backend/utils/resowner/resowner.c
+++ b/src/backend/utils/resowner/resowner.c
@@ -407,8 +407,7 @@ ResourceArrayGetAny(ResourceArray *resarr, Datum *value)
 static void
 ResourceArrayFree(ResourceArray *resarr)
 {
-       if (resarr->itemsarr)
-               pfree(resarr->itemsarr);
+       pfree(resarr->itemsarr);
 }
 
 
diff --git a/src/backend/utils/sort/logtape.c b/src/backend/utils/sort/logtape.c
index c384f98e13..67cc6fd204 100644
--- a/src/backend/utils/sort/logtape.c
+++ b/src/backend/utils/sort/logtape.c
@@ -733,8 +733,7 @@ ltsCreateTape(LogicalTapeSet *lts)
 void
 LogicalTapeClose(LogicalTape *lt)
 {
-       if (lt->buffer)
-               pfree(lt->buffer);
+       pfree(lt->buffer);
        pfree(lt);
 }
 
@@ -901,8 +900,7 @@ LogicalTapeRewindForRead(LogicalTape *lt, size_t 
buffer_size)
                Assert(lt->frozen);
        }
 
-       if (lt->buffer)
-               pfree(lt->buffer);
+       pfree(lt->buffer);
 
        /* the buffer is lazily allocated, but set the size here */
        lt->buffer = NULL;
@@ -1018,8 +1016,7 @@ LogicalTapeFreeze(LogicalTape *lt, TapeShare *share)
         */
        if (!lt->buffer || lt->buffer_size != BLCKSZ)
        {
-               if (lt->buffer)
-                       pfree(lt->buffer);
+               pfree(lt->buffer);
                lt->buffer = palloc(BLCKSZ);
                lt->buffer_size = BLCKSZ;
        }
diff --git a/src/backend/utils/sort/sharedtuplestore.c 
b/src/backend/utils/sort/sharedtuplestore.c
index 996cef07d4..daba9fdf95 100644
--- a/src/backend/utils/sort/sharedtuplestore.c
+++ b/src/backend/utils/sort/sharedtuplestore.c
@@ -444,8 +444,7 @@ sts_read_tuple(SharedTuplestoreAccessor *accessor, void 
*meta_data)
        {
                size_t          new_read_buffer_size;
 
-               if (accessor->read_buffer != NULL)
-                       pfree(accessor->read_buffer);
+               pfree(accessor->read_buffer);
                new_read_buffer_size = Max(size, accessor->read_buffer_size * 
2);
                accessor->read_buffer =
                        MemoryContextAlloc(accessor->context, 
new_read_buffer_size);
diff --git a/src/bin/pg_verifybackup/parse_manifest.c 
b/src/bin/pg_verifybackup/parse_manifest.c
index 6364b01282..d682babba3 100644
--- a/src/bin/pg_verifybackup/parse_manifest.c
+++ b/src/bin/pg_verifybackup/parse_manifest.c
@@ -535,21 +535,12 @@ json_manifest_finalize_file(JsonManifestParseState *parse)
                                                checksum_type, checksum_length, 
checksum_payload);
 
        /* Free memory we no longer need. */
-       if (parse->size != NULL)
-       {
-               pfree(parse->size);
-               parse->size = NULL;
-       }
-       if (parse->algorithm != NULL)
-       {
-               pfree(parse->algorithm);
-               parse->algorithm = NULL;
-       }
-       if (parse->checksum != NULL)
-       {
-               pfree(parse->checksum);
-               parse->checksum = NULL;
-       }
+       pfree(parse->size);
+       parse->size = NULL;
+       pfree(parse->algorithm);
+       parse->algorithm = NULL;
+       pfree(parse->checksum);
+       parse->checksum = NULL;
 }
 
 /*
@@ -591,21 +582,12 @@ json_manifest_finalize_wal_range(JsonManifestParseState 
*parse)
        context->perwalrange_cb(context, tli, start_lsn, end_lsn);
 
        /* Free memory we no longer need. */
-       if (parse->timeline != NULL)
-       {
-               pfree(parse->timeline);
-               parse->timeline = NULL;
-       }
-       if (parse->start_lsn != NULL)
-       {
-               pfree(parse->start_lsn);
-               parse->start_lsn = NULL;
-       }
-       if (parse->end_lsn != NULL)
-       {
-               pfree(parse->end_lsn);
-               parse->end_lsn = NULL;
-       }
+       pfree(parse->timeline);
+       parse->timeline = NULL;
+       pfree(parse->start_lsn);
+       parse->start_lsn = NULL;
+       pfree(parse->end_lsn);
+       parse->end_lsn = NULL;
 }
 
 /*
diff --git a/src/common/compression.c b/src/common/compression.c
index da3c291c0f..b63d42844f 100644
--- a/src/common/compression.c
+++ b/src/common/compression.c
@@ -188,8 +188,7 @@ parse_compress_specification(pg_compress_algorithm 
algorithm, char *specificatio
 
                /* Release memory, just to be tidy. */
                pfree(keyword);
-               if (value != NULL)
-                       pfree(value);
+               pfree(value);
 
                /*
                 * If we got an error or have reached the end of the string, 
stop.
diff --git a/src/include/replication/walreceiver.h 
b/src/include/replication/walreceiver.h
index 9339f29303..4780b2a0a9 100644
--- a/src/include/replication/walreceiver.h
+++ b/src/include/replication/walreceiver.h
@@ -442,8 +442,7 @@ walrcv_clear_result(WalRcvExecResult *walres)
        if (!walres)
                return;
 
-       if (walres->err)
-               pfree(walres->err);
+       pfree(walres->err);
 
        if (walres->tuplestore)
                tuplestore_end(walres->tuplestore);
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index af354a68cc..f6fc4303fd 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -4064,8 +4064,7 @@ plperl_util_elog(int level, SV *msg)
                edata = CopyErrorData();
                FlushErrorState();
 
-               if (cmsg)
-                       pfree(cmsg);
+               pfree(cmsg);
 
                /* Punt the error to Perl */
                croak_cstr(edata->message);
diff --git a/src/pl/plpython/plpy_elog.c b/src/pl/plpython/plpy_elog.c
index 7c627eacfb..5058c6a205 100644
--- a/src/pl/plpython/plpy_elog.c
+++ b/src/pl/plpython/plpy_elog.c
@@ -141,10 +141,8 @@ PLy_elog_impl(int elevel, const char *fmt,...)
        {
                if (fmt)
                        pfree(emsg.data);
-               if (xmsg)
-                       pfree(xmsg);
-               if (tbmsg)
-                       pfree(tbmsg);
+               pfree(xmsg);
+               pfree(tbmsg);
                Py_XDECREF(exc);
                Py_XDECREF(val);
        }
diff --git a/src/pl/plpython/plpy_exec.c b/src/pl/plpython/plpy_exec.c
index 150b3a5977..1a7c4b6a72 100644
--- a/src/pl/plpython/plpy_exec.c
+++ b/src/pl/plpython/plpy_exec.c
@@ -981,12 +981,9 @@ PLy_modify_tuple(PLyProcedure *proc, PyObject *pltd, 
TriggerData *tdata,
                Py_XDECREF(plkeys);
                Py_XDECREF(plval);
 
-               if (modvalues)
-                       pfree(modvalues);
-               if (modnulls)
-                       pfree(modnulls);
-               if (modrepls)
-                       pfree(modrepls);
+               pfree(modvalues);
+               pfree(modnulls);
+               pfree(modrepls);
 
                PG_RE_THROW();
        }
diff --git a/src/pl/plpython/plpy_plpymodule.c 
b/src/pl/plpython/plpy_plpymodule.c
index fa08f0dbfb..91ab319700 100644
--- a/src/pl/plpython/plpy_plpymodule.c
+++ b/src/pl/plpython/plpy_plpymodule.c
@@ -452,8 +452,7 @@ PLy_output(volatile int level, PyObject *self, PyObject 
*args, PyObject *kw)
                                        return NULL;
                                }
 
-                               if (message)
-                                       pfree(message);
+                               pfree(message);
                                message = object_to_string(value);
                        }
                        else if (strcmp(keyword, "detail") == 0)
diff --git a/src/pl/plpython/plpy_typeio.c b/src/pl/plpython/plpy_typeio.c
index 7018c9d404..9f9f5eec84 100644
--- a/src/pl/plpython/plpy_typeio.c
+++ b/src/pl/plpython/plpy_typeio.c
@@ -175,8 +175,7 @@ PLy_input_setup_tuple(PLyDatumToOb *arg, TupleDesc desc, 
PLyProcedure *proc)
        /* (Re)allocate atts array as needed */
        if (arg->u.tuple.natts != desc->natts)
        {
-               if (arg->u.tuple.atts)
-                       pfree(arg->u.tuple.atts);
+               pfree(arg->u.tuple.atts);
                arg->u.tuple.natts = desc->natts;
                arg->u.tuple.atts = (PLyDatumToOb *)
                        MemoryContextAllocZero(arg->mcxt,
@@ -225,8 +224,7 @@ PLy_output_setup_tuple(PLyObToDatum *arg, TupleDesc desc, 
PLyProcedure *proc)
        /* (Re)allocate atts array as needed */
        if (arg->u.tuple.natts != desc->natts)
        {
-               if (arg->u.tuple.atts)
-                       pfree(arg->u.tuple.atts);
+               pfree(arg->u.tuple.atts);
                arg->u.tuple.natts = desc->natts;
                arg->u.tuple.atts = (PLyObToDatum *)
                        MemoryContextAllocZero(arg->mcxt,
diff --git a/src/test/modules/test_oat_hooks/test_oat_hooks.c 
b/src/test/modules/test_oat_hooks/test_oat_hooks.c
index 4b4e259cd2..65f21b1209 100644
--- a/src/test/modules/test_oat_hooks/test_oat_hooks.c
+++ b/src/test/modules/test_oat_hooks/test_oat_hooks.c
@@ -249,10 +249,8 @@ emit_audit_message(const char *type, const char *hook, 
char *action, char *objNa
                                         errmsg("in %s: %s %s %s", hook, who, 
type, action)));
        }
 
-       if (action)
-               pfree(action);
-       if (objName)
-               pfree(objName);
+       pfree(action);
+       pfree(objName);
 }
 
 static void
-- 
2.37.1

From f8332e5d2797b1e7d4081a746412a49f8595d38f Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Mon, 22 Aug 2022 16:51:52 +0200
Subject: [PATCH 4/5] Remove unneeded null pointer checks before PQfreemem()

---
 contrib/vacuumlo/vacuumlo.c                              | 9 +++------
 .../replication/libpqwalreceiver/libpqwalreceiver.c      | 6 ++----
 src/bin/pg_basebackup/receivelog.c                       | 9 +++------
 3 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index b7c8f2c805..264b879bd3 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -231,12 +231,9 @@ vacuumlo(const char *database, const struct _param *param)
                        pg_log_error("%s", PQerrorMessage(conn));
                        PQclear(res);
                        PQfinish(conn);
-                       if (schema != NULL)
-                               PQfreemem(schema);
-                       if (table != NULL)
-                               PQfreemem(table);
-                       if (field != NULL)
-                               PQfreemem(field);
+                       PQfreemem(schema);
+                       PQfreemem(table);
+                       PQfreemem(field);
                        return -1;
                }
 
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c 
b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
index 2865024524..7f697b0f29 100644
--- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
+++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
@@ -741,8 +741,7 @@ static void
 libpqrcv_disconnect(WalReceiverConn *conn)
 {
        PQfinish(conn->streamConn);
-       if (conn->recvBuf != NULL)
-               PQfreemem(conn->recvBuf);
+       PQfreemem(conn->recvBuf);
        pfree(conn);
 }
 
@@ -768,8 +767,7 @@ libpqrcv_receive(WalReceiverConn *conn, char **buffer,
 {
        int                     rawlen;
 
-       if (conn->recvBuf != NULL)
-               PQfreemem(conn->recvBuf);
+       PQfreemem(conn->recvBuf);
        conn->recvBuf = NULL;
 
        /* Try to receive a CopyData message */
diff --git a/src/bin/pg_basebackup/receivelog.c 
b/src/bin/pg_basebackup/receivelog.c
index 976d1e73b1..5f6fd3201f 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -858,8 +858,7 @@ HandleCopyStream(PGconn *conn, StreamCtl *stream,
        }
 
 error:
-       if (copybuf != NULL)
-               PQfreemem(copybuf);
+       PQfreemem(copybuf);
        return NULL;
 }
 
@@ -940,8 +939,7 @@ CopyStreamReceive(PGconn *conn, long timeout, pgsocket 
stop_socket,
        char       *copybuf = NULL;
        int                     rawlen;
 
-       if (*buffer != NULL)
-               PQfreemem(*buffer);
+       PQfreemem(*buffer);
        *buffer = NULL;
 
        /* Try to receive a CopyData message */
@@ -1204,8 +1202,7 @@ HandleEndOfCopyStream(PGconn *conn, StreamCtl *stream, 
char *copybuf,
                }
                still_sending = false;
        }
-       if (copybuf != NULL)
-               PQfreemem(copybuf);
+       PQfreemem(copybuf);
        *stoppos = blockpos;
        return res;
 }
-- 
2.37.1

From 0584fb2e6b09798ca025107ef49d5f28977cf31f Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Mon, 22 Aug 2022 16:51:52 +0200
Subject: [PATCH 5/5] Remove unneeded null pointer check before FreeDir()

---
 src/backend/utils/misc/guc-file.l | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/backend/utils/misc/guc-file.l 
b/src/backend/utils/misc/guc-file.l
index 6d0e7b4dc5..acc34858c5 100644
--- a/src/backend/utils/misc/guc-file.l
+++ b/src/backend/utils/misc/guc-file.l
@@ -1086,8 +1086,7 @@ ParseConfigDirectory(const char *includedir,
        status = true;
 
 cleanup:
-       if (d)
-               FreeDir(d);
+       FreeDir(d);
        pfree(directory);
        return status;
 }
-- 
2.37.1

Reply via email to