xlrec.flags = SMGR_TRUNCATE_VM;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, sizeof(xlrec));
+       XLogRegisterData(&xlrec, sizeof(xlrec));
 
        lsn = XLogInsert(RM_SMGR_ID,
                         XLOG_SMGR_TRUNCATE | XLR_SPECIAL_REL_UPDATE);
 
        xlrec.pagesPerRange = BrinGetPagesPerRange(index);
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfBrinCreateIdx);
+       XLogRegisterData(&xlrec, SizeOfBrinCreateIdx);
        XLogRegisterBuffer(0, meta, REGBUF_WILL_INIT | REGBUF_STANDARD);
 
        recptr = XLogInsert(RM_BRIN_ID, XLOG_BRIN_CREATE_INDEX);
 
            xlrec.offnum = oldoff;
 
            XLogBeginInsert();
-           XLogRegisterData((char *) &xlrec, SizeOfBrinSamepageUpdate);
+           XLogRegisterData(&xlrec, SizeOfBrinSamepageUpdate);
 
            XLogRegisterBuffer(0, oldbuf, REGBUF_STANDARD);
-           XLogRegisterBufData(0, (const char *) newtup, newsz);
+           XLogRegisterBufData(0, newtup, newsz);
 
            recptr = XLogInsert(RM_BRIN_ID, info);
 
            XLogBeginInsert();
 
            /* new page */
-           XLogRegisterData((char *) &xlrec, SizeOfBrinUpdate);
+           XLogRegisterData(&xlrec, SizeOfBrinUpdate);
 
            XLogRegisterBuffer(0, newbuf, REGBUF_STANDARD | (extended ? REGBUF_WILL_INIT : 0));
-           XLogRegisterBufData(0, (const char *) newtup, newsz);
+           XLogRegisterBufData(0, newtup, newsz);
 
            /* revmap page */
            XLogRegisterBuffer(1, revmapbuf, 0);
        xlrec.offnum = off;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfBrinInsert);
+       XLogRegisterData(&xlrec, SizeOfBrinInsert);
 
        XLogRegisterBuffer(0, *buffer, REGBUF_STANDARD | (extended ? REGBUF_WILL_INIT : 0));
-       XLogRegisterBufData(0, (char *) tup, itemsz);
+       XLogRegisterBufData(0, tup, itemsz);
 
        XLogRegisterBuffer(1, revmapbuf, 0);
 
 
        xlrec.regOffset = regOffset;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfBrinDesummarize);
+       XLogRegisterData(&xlrec, SizeOfBrinDesummarize);
        XLogRegisterBuffer(0, revmapBuf, 0);
        XLogRegisterBuffer(1, regBuf, REGBUF_STANDARD);
        recptr = XLogInsert(RM_BRIN_ID, XLOG_BRIN_DESUMMARIZE);
        xlrec.targetBlk = mapBlk;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfBrinRevmapExtend);
+       XLogRegisterData(&xlrec, SizeOfBrinRevmapExtend);
        XLogRegisterBuffer(0, revmap->rm_metaBuf, REGBUF_STANDARD);
 
        XLogRegisterBuffer(1, buf, REGBUF_WILL_INIT);
 
 
            xlrec.flags = xlflags;
 
-           XLogRegisterData((char *) &xlrec, sizeof(ginxlogInsert));
+           XLogRegisterData(&xlrec, sizeof(ginxlogInsert));
 
            /*
             * Log information about child if this was an insertion of a
            {
                BlockIdSet(&childblknos[0], BufferGetBlockNumber(childbuf));
                BlockIdSet(&childblknos[1], GinPageGetOpaque(childpage)->rightlink);
-               XLogRegisterData((char *) childblknos,
+               XLogRegisterData(childblknos,
                                 sizeof(BlockIdData) * 2);
            }
 
            if (BufferIsValid(childbuf))
                XLogRegisterBuffer(3, childbuf, REGBUF_STANDARD);
 
-           XLogRegisterData((char *) &data, sizeof(ginxlogSplit));
+           XLogRegisterData(&data, sizeof(ginxlogSplit));
 
            recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_SPLIT);
 
 
     * If we need WAL data representing the reconstructed leaf page, it's
     * stored here by computeLeafRecompressWALData.
     */
-   char       *walinfo;        /* buffer start */
+   void       *walinfo;        /* buffer start */
    int         walinfolen;     /* and length */
 } disassembledLeaf;
 
        data.newitem = *pitem;
 
        XLogRegisterBuffer(0, buf, REGBUF_STANDARD);
-       XLogRegisterBufData(0, (char *) &data,
+       XLogRegisterBufData(0, &data,
                            sizeof(ginxlogInsertDataInternal));
    }
 }
        data.size = rootsize;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &data, sizeof(ginxlogCreatePostingTree));
+       XLogRegisterData(&data, sizeof(ginxlogCreatePostingTree));
 
-       XLogRegisterData((char *) GinDataLeafPageGetPostingList(page),
+       XLogRegisterData(GinDataLeafPageGetPostingList(page),
                         rootsize);
        XLogRegisterBuffer(0, buffer, REGBUF_WILL_INIT);
 
 
        data.offset = off;
 
        XLogRegisterBuffer(0, buf, REGBUF_STANDARD);
-       XLogRegisterBufData(0, (char *) &data,
+       XLogRegisterBufData(0, &data,
                            offsetof(ginxlogInsertEntry, tuple));
-       XLogRegisterBufData(0, (char *) insertData->entry,
+       XLogRegisterBufData(0, insertData->entry,
                            IndexTupleSize(insertData->entry));
    }
 }
 
        data.ntuples = ntuples;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &data, sizeof(ginxlogInsertListPage));
+       XLogRegisterData(&data, sizeof(ginxlogInsertListPage));
 
        XLogRegisterBuffer(0, buffer, REGBUF_WILL_INIT);
        XLogRegisterBufData(0, workspace.data, size);
        memcpy(&data.metadata, metadata, sizeof(GinMetaPageData));
 
        XLogRegisterBuffer(0, metabuffer, REGBUF_WILL_INIT | REGBUF_STANDARD);
-       XLogRegisterData((char *) &data, sizeof(ginxlogUpdateMeta));
+       XLogRegisterData(&data, sizeof(ginxlogUpdateMeta));
 
        recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_UPDATE_META_PAGE);
        PageSetLSN(metapage, recptr);
 
            memcpy(&data.metadata, metadata, sizeof(GinMetaPageData));
 
-           XLogRegisterData((char *) &data,
+           XLogRegisterData(&data,
                             sizeof(ginxlogDeleteListPages));
 
            recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_DELETE_LISTPAGE);
 
        memcpy(&data.metadata, metadata, sizeof(GinMetaPageData));
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &data, sizeof(ginxlogUpdateMeta));
+       XLogRegisterData(&data, sizeof(ginxlogUpdateMeta));
        XLogRegisterBuffer(0, metabuffer, REGBUF_WILL_INIT | REGBUF_STANDARD);
 
        recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_UPDATE_META_PAGE);
 
        data.rightLink = GinPageGetOpaque(page)->rightlink;
        data.deleteXid = GinPageGetDeleteXid(page);
 
-       XLogRegisterData((char *) &data, sizeof(ginxlogDeletePage));
+       XLogRegisterData(&data, sizeof(ginxlogDeletePage));
 
        recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_DELETE_PAGE);
        PageSetLSN(page, recptr);
 
     * of buffer or data registrations here, make sure you modify the
     * XLogEnsureRecordSpace() calls accordingly!
     */
-   XLogRegisterData((char *) &xlrec, sizeof(gistxlogPageSplit));
+   XLogRegisterData(&xlrec, sizeof(gistxlogPageSplit));
 
    i = 1;
    for (ptr = dist; ptr; ptr = ptr->next)
    {
        XLogRegisterBuffer(i, ptr->buffer, REGBUF_WILL_INIT);
-       XLogRegisterBufData(i, (char *) &(ptr->block.num), sizeof(int));
-       XLogRegisterBufData(i, (char *) ptr->list, ptr->lenlist);
+       XLogRegisterBufData(i, &(ptr->block.num), sizeof(int));
+       XLogRegisterBufData(i, ptr->list, ptr->lenlist);
        i++;
    }
 
    xlrec.downlinkOffset = downlinkOffset;
 
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec, SizeOfGistxlogPageDelete);
+   XLogRegisterData(&xlrec, SizeOfGistxlogPageDelete);
 
    XLogRegisterBuffer(0, buffer, REGBUF_STANDARD);
    XLogRegisterBuffer(1, parentBuffer, REGBUF_STANDARD);
     */
    XLogBeginInsert();
    XLogSetRecordFlags(XLOG_MARK_UNIMPORTANT);
-   XLogRegisterData((char *) &dummy, sizeof(dummy));
+   XLogRegisterData(&dummy, sizeof(dummy));
    return XLogInsert(RM_GIST_ID, XLOG_GIST_ASSIGN_LSN);
 }
 
    xlrec_reuse.snapshotConflictHorizon = deleteXid;
 
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec_reuse, SizeOfGistxlogPageReuse);
+   XLogRegisterData(&xlrec_reuse, SizeOfGistxlogPageReuse);
 
    XLogInsert(RM_GIST_ID, XLOG_GIST_PAGE_REUSE);
 }
    xlrec.ntoinsert = ituplen;
 
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec, sizeof(gistxlogPageUpdate));
+   XLogRegisterData(&xlrec, sizeof(gistxlogPageUpdate));
 
    XLogRegisterBuffer(0, buffer, REGBUF_STANDARD);
-   XLogRegisterBufData(0, (char *) todelete, sizeof(OffsetNumber) * ntodelete);
+   XLogRegisterBufData(0, todelete, sizeof(OffsetNumber) * ntodelete);
 
    /* new tuples */
    for (i = 0; i < ituplen; i++)
-       XLogRegisterBufData(0, (char *) (itup[i]), IndexTupleSize(itup[i]));
+       XLogRegisterBufData(0, itup[i], IndexTupleSize(itup[i]));
 
    /*
     * Include a full page image of the child buf. (only necessary if a
    xlrec.ntodelete = ntodelete;
 
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec, SizeOfGistxlogDelete);
+   XLogRegisterData(&xlrec, SizeOfGistxlogDelete);
 
    /*
     * We need the target-offsets array whether or not we store the whole
     * buffer, to allow us to find the snapshotConflictHorizon on a standby
     * server.
     */
-   XLogRegisterData((char *) todelete, ntodelete * sizeof(OffsetNumber));
+   XLogRegisterData(todelete, ntodelete * sizeof(OffsetNumber));
 
    XLogRegisterBuffer(0, buffer, REGBUF_STANDARD);
 
 
        xlrec.ntuples = metap->hashm_ntuples;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfHashUpdateMetaPage);
+       XLogRegisterData(&xlrec, SizeOfHashUpdateMetaPage);
 
        XLogRegisterBuffer(0, metabuf, REGBUF_STANDARD);
 
                xlrec.is_primary_bucket_page = (buf == bucket_buf);
 
                XLogBeginInsert();
-               XLogRegisterData((char *) &xlrec, SizeOfHashDelete);
+               XLogRegisterData(&xlrec, SizeOfHashDelete);
 
                /*
                 * bucket buffer was not changed, but still needs to be
                }
 
                XLogRegisterBuffer(1, buf, REGBUF_STANDARD);
-               XLogRegisterBufData(1, (char *) deletable,
+               XLogRegisterBufData(1, deletable,
                                    ndeletable * sizeof(OffsetNumber));
 
                recptr = XLogInsert(RM_HASH_ID, XLOG_HASH_DELETE);
 
        xlrec.offnum = itup_off;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfHashInsert);
+       XLogRegisterData(&xlrec, SizeOfHashInsert);
 
        XLogRegisterBuffer(1, metabuf, REGBUF_STANDARD);
 
        XLogRegisterBuffer(0, buf, REGBUF_STANDARD);
-       XLogRegisterBufData(0, (char *) itup, IndexTupleSize(itup));
+       XLogRegisterBufData(0, itup, IndexTupleSize(itup));
 
        recptr = XLogInsert(RM_HASH_ID, XLOG_HASH_INSERT);
 
 
            XLogBeginInsert();
            XLogRegisterBuffer(0, buf, REGBUF_STANDARD);
-           XLogRegisterData((char *) &xlrec, SizeOfHashVacuumOnePage);
+           XLogRegisterData(&xlrec, SizeOfHashVacuumOnePage);
 
            /*
             * We need the target-offsets array whether or not we store the
             * whole buffer, to allow us to find the snapshotConflictHorizon
             * on a standby server.
             */
-           XLogRegisterData((char *) deletable,
+           XLogRegisterData(deletable,
                             ndeletable * sizeof(OffsetNumber));
 
            XLogRegisterBuffer(1, metabuf, REGBUF_STANDARD);
 
        xlrec.bmsize = metap->hashm_bmsize;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfHashAddOvflPage);
+       XLogRegisterData(&xlrec, SizeOfHashAddOvflPage);
 
        XLogRegisterBuffer(0, ovflbuf, REGBUF_WILL_INIT);
-       XLogRegisterBufData(0, (char *) &pageopaque->hasho_bucket, sizeof(Bucket));
+       XLogRegisterBufData(0, &pageopaque->hasho_bucket, sizeof(Bucket));
 
        XLogRegisterBuffer(1, buf, REGBUF_STANDARD);
 
        if (BufferIsValid(mapbuf))
        {
            XLogRegisterBuffer(2, mapbuf, REGBUF_STANDARD);
-           XLogRegisterBufData(2, (char *) &bitmap_page_bit, sizeof(uint32));
+           XLogRegisterBufData(2, &bitmap_page_bit, sizeof(uint32));
        }
 
        if (BufferIsValid(newmapbuf))
            XLogRegisterBuffer(3, newmapbuf, REGBUF_WILL_INIT);
 
        XLogRegisterBuffer(4, metabuf, REGBUF_STANDARD);
-       XLogRegisterBufData(4, (char *) &metap->hashm_firstfree, sizeof(uint32));
+       XLogRegisterBufData(4, &metap->hashm_firstfree, sizeof(uint32));
 
        recptr = XLogInsert(RM_HASH_ID, XLOG_HASH_ADD_OVFL_PAGE);
 
        xlrec.is_prev_bucket_same_wrt = (wbuf == prevbuf);
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfHashSqueezePage);
+       XLogRegisterData(&xlrec, SizeOfHashSqueezePage);
 
        /*
         * bucket buffer was not changed, but still needs to be registered to
            /* Remember that wbuf is modified. */
            mod_wbuf = true;
 
-           XLogRegisterBufData(1, (char *) itup_offsets,
+           XLogRegisterBufData(1, itup_offsets,
                                nitups * sizeof(OffsetNumber));
            for (i = 0; i < nitups; i++)
-               XLogRegisterBufData(1, (char *) itups[i], tups_size[i]);
+               XLogRegisterBufData(1, itups[i], tups_size[i]);
        }
        else if (xlrec.is_prim_bucket_same_wrt || xlrec.is_prev_bucket_same_wrt)
        {
            XLogRegisterBuffer(4, nextbuf, REGBUF_STANDARD);
 
        XLogRegisterBuffer(5, mapbuf, REGBUF_STANDARD);
-       XLogRegisterBufData(5, (char *) &bitmapbit, sizeof(uint32));
+       XLogRegisterBufData(5, &bitmapbit, sizeof(uint32));
 
        if (update_metap)
        {
            XLogRegisterBuffer(6, metabuf, REGBUF_STANDARD);
-           XLogRegisterBufData(6, (char *) &metap->hashm_firstfree, sizeof(uint32));
+           XLogRegisterBufData(6, &metap->hashm_firstfree, sizeof(uint32));
        }
 
        recptr = XLogInsert(RM_HASH_ID, XLOG_HASH_SQUEEZE_PAGE);
                        xlrec.is_prim_bucket_same_wrt = (wbuf == bucket_buf);
 
                        XLogBeginInsert();
-                       XLogRegisterData((char *) &xlrec, SizeOfHashMovePageContents);
+                       XLogRegisterData(&xlrec, SizeOfHashMovePageContents);
 
                        /*
                         * bucket buffer was not changed, but still needs to
                        }
 
                        XLogRegisterBuffer(1, wbuf, REGBUF_STANDARD);
-                       XLogRegisterBufData(1, (char *) itup_offsets,
+                       XLogRegisterBufData(1, itup_offsets,
                                            nitups * sizeof(OffsetNumber));
                        for (i = 0; i < nitups; i++)
-                           XLogRegisterBufData(1, (char *) itups[i], tups_size[i]);
+                           XLogRegisterBufData(1, itups[i], tups_size[i]);
 
                        XLogRegisterBuffer(2, rbuf, REGBUF_STANDARD);
-                       XLogRegisterBufData(2, (char *) deletable,
+                       XLogRegisterBufData(2, deletable,
                                            ndeletable * sizeof(OffsetNumber));
 
                        recptr = XLogInsert(RM_HASH_ID, XLOG_HASH_MOVE_PAGE_CONTENTS);
 
        xlrec.ffactor = metap->hashm_ffactor;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfHashInitMetaPage);
+       XLogRegisterData(&xlrec, SizeOfHashInitMetaPage);
        XLogRegisterBuffer(0, metabuf, REGBUF_WILL_INIT | REGBUF_STANDARD);
 
        recptr = XLogInsert(RM_HASH_ID, XLOG_HASH_INIT_META_PAGE);
        xlrec.bmsize = metap->hashm_bmsize;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfHashInitBitmapPage);
+       XLogRegisterData(&xlrec, SizeOfHashInitBitmapPage);
        XLogRegisterBuffer(0, bitmapbuf, REGBUF_WILL_INIT);
 
        /*
        if (metap_update_masks)
        {
            xlrec.flags |= XLH_SPLIT_META_UPDATE_MASKS;
-           XLogRegisterBufData(2, (char *) &metap->hashm_lowmask, sizeof(uint32));
-           XLogRegisterBufData(2, (char *) &metap->hashm_highmask, sizeof(uint32));
+           XLogRegisterBufData(2, &metap->hashm_lowmask, sizeof(uint32));
+           XLogRegisterBufData(2, &metap->hashm_highmask, sizeof(uint32));
        }
 
        if (metap_update_splitpoint)
        {
            xlrec.flags |= XLH_SPLIT_META_UPDATE_SPLITPOINT;
-           XLogRegisterBufData(2, (char *) &metap->hashm_ovflpoint,
+           XLogRegisterBufData(2, &metap->hashm_ovflpoint,
                                sizeof(uint32));
            XLogRegisterBufData(2,
-                               (char *) &metap->hashm_spares[metap->hashm_ovflpoint],
+                               &metap->hashm_spares[metap->hashm_ovflpoint],
                                sizeof(uint32));
        }
 
-       XLogRegisterData((char *) &xlrec, SizeOfHashSplitAllocPage);
+       XLogRegisterData(&xlrec, SizeOfHashSplitAllocPage);
 
        recptr = XLogInsert(RM_HASH_ID, XLOG_HASH_SPLIT_ALLOCATE_PAGE);
 
 
        XLogBeginInsert();
 
-       XLogRegisterData((char *) &xlrec, SizeOfHashSplitComplete);
+       XLogRegisterData(&xlrec, SizeOfHashSplitComplete);
 
        XLogRegisterBuffer(0, bucket_obuf, REGBUF_STANDARD);
        XLogRegisterBuffer(1, bucket_nbuf, REGBUF_STANDARD);
 
        }
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfHeapInsert);
+       XLogRegisterData(&xlrec, SizeOfHeapInsert);
 
        xlhdr.t_infomask2 = heaptup->t_data->t_infomask2;
        xlhdr.t_infomask = heaptup->t_data->t_infomask;
         * xl_heap_header in the xlog.
         */
        XLogRegisterBuffer(0, buffer, REGBUF_STANDARD | bufflags);
-       XLogRegisterBufData(0, (char *) &xlhdr, SizeOfHeapHeader);
+       XLogRegisterBufData(0, &xlhdr, SizeOfHeapHeader);
        /* PG73FORMAT: write bitmap [+ padding] [+ oid] + data */
        XLogRegisterBufData(0,
                            (char *) heaptup->t_data + SizeofHeapTupleHeader,
                bufflags |= REGBUF_KEEP_DATA;
 
            XLogBeginInsert();
-           XLogRegisterData((char *) xlrec, tupledata - scratch.data);
+           XLogRegisterData(xlrec, tupledata - scratch.data);
            XLogRegisterBuffer(0, buffer, REGBUF_STANDARD | bufflags);
 
            XLogRegisterBufData(0, tupledata, totaldatalen);
        }
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfHeapDelete);
+       XLogRegisterData(&xlrec, SizeOfHeapDelete);
 
        XLogRegisterBuffer(0, buffer, REGBUF_STANDARD);
 
            xlhdr.t_infomask = old_key_tuple->t_data->t_infomask;
            xlhdr.t_hoff = old_key_tuple->t_data->t_hoff;
 
-           XLogRegisterData((char *) &xlhdr, SizeOfHeapHeader);
+           XLogRegisterData(&xlhdr, SizeOfHeapHeader);
            XLogRegisterData((char *) old_key_tuple->t_data
                             + SizeofHeapTupleHeader,
                             old_key_tuple->t_len
                                                  oldtup.t_data->t_infomask2);
            xlrec.flags =
                cleared_all_frozen ? XLH_LOCK_ALL_FROZEN_CLEARED : 0;
-           XLogRegisterData((char *) &xlrec, SizeOfHeapLock);
+           XLogRegisterData(&xlrec, SizeOfHeapLock);
            recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_LOCK);
            PageSetLSN(page, recptr);
        }
        xlrec.infobits_set = compute_infobits(new_infomask,
                                              tuple->t_data->t_infomask2);
        xlrec.flags = cleared_all_frozen ? XLH_LOCK_ALL_FROZEN_CLEARED : 0;
-       XLogRegisterData((char *) &xlrec, SizeOfHeapLock);
+       XLogRegisterData(&xlrec, SizeOfHeapLock);
 
        /* we don't decode row locks atm, so no need to log the origin */
 
            xlrec.flags =
                cleared_all_frozen ? XLH_LOCK_ALL_FROZEN_CLEARED : 0;
 
-           XLogRegisterData((char *) &xlrec, SizeOfHeapLockUpdated);
+           XLogRegisterData(&xlrec, SizeOfHeapLockUpdated);
 
            recptr = XLogInsert(RM_HEAP2_ID, XLOG_HEAP2_LOCK_UPDATED);
 
        /* We want the same filtering on this as on a plain insert */
        XLogSetRecordFlags(XLOG_INCLUDE_ORIGIN);
 
-       XLogRegisterData((char *) &xlrec, SizeOfHeapConfirm);
+       XLogRegisterData(&xlrec, SizeOfHeapConfirm);
        XLogRegisterBuffer(0, buffer, REGBUF_STANDARD);
 
        recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_CONFIRM);
        xlrec.xmax = xid;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfHeapDelete);
+       XLogRegisterData(&xlrec, SizeOfHeapDelete);
        XLogRegisterBuffer(0, buffer, REGBUF_STANDARD);
 
        /* No replica identity & replication origin logged */
        xlrec.nmsgs = nmsgs;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, MinSizeOfHeapInplace);
+       XLogRegisterData(&xlrec, MinSizeOfHeapInplace);
        if (nmsgs != 0)
-           XLogRegisterData((char *) invalMessages,
+           XLogRegisterData(invalMessages,
                             nmsgs * sizeof(SharedInvalidationMessage));
 
        /* register block matching what buffer will look like after changes */
    if (RelationIsAccessibleInLogicalDecoding(rel))
        xlrec.flags |= VISIBILITYMAP_XLOG_CATALOG_REL;
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec, SizeOfHeapVisible);
+   XLogRegisterData(&xlrec, SizeOfHeapVisible);
 
    XLogRegisterBuffer(0, vm_buffer, 0);
 
    if (oldbuf != newbuf)
        XLogRegisterBuffer(1, oldbuf, REGBUF_STANDARD);
 
-   XLogRegisterData((char *) &xlrec, SizeOfHeapUpdate);
+   XLogRegisterData(&xlrec, SizeOfHeapUpdate);
 
    /*
     * Prepare WAL data for the new tuple.
        {
            prefix_suffix[0] = prefixlen;
            prefix_suffix[1] = suffixlen;
-           XLogRegisterBufData(0, (char *) &prefix_suffix, sizeof(uint16) * 2);
+           XLogRegisterBufData(0, &prefix_suffix, sizeof(uint16) * 2);
        }
        else if (prefixlen > 0)
        {
-           XLogRegisterBufData(0, (char *) &prefixlen, sizeof(uint16));
+           XLogRegisterBufData(0, &prefixlen, sizeof(uint16));
        }
        else
        {
-           XLogRegisterBufData(0, (char *) &suffixlen, sizeof(uint16));
+           XLogRegisterBufData(0, &suffixlen, sizeof(uint16));
        }
    }
 
     *
     * The 'data' doesn't include the common prefix or suffix.
     */
-   XLogRegisterBufData(0, (char *) &xlhdr, SizeOfHeapHeader);
+   XLogRegisterBufData(0, &xlhdr, SizeOfHeapHeader);
    if (prefixlen == 0)
    {
        XLogRegisterBufData(0,
-                           ((char *) newtup->t_data) + SizeofHeapTupleHeader,
+                           (char *) newtup->t_data + SizeofHeapTupleHeader,
                            newtup->t_len - SizeofHeapTupleHeader - suffixlen);
    }
    else
        if (newtup->t_data->t_hoff - SizeofHeapTupleHeader > 0)
        {
            XLogRegisterBufData(0,
-                               ((char *) newtup->t_data) + SizeofHeapTupleHeader,
+                               (char *) newtup->t_data + SizeofHeapTupleHeader,
                                newtup->t_data->t_hoff - SizeofHeapTupleHeader);
        }
 
        /* data after common prefix */
        XLogRegisterBufData(0,
-                           ((char *) newtup->t_data) + newtup->t_data->t_hoff + prefixlen,
+                           (char *) newtup->t_data + newtup->t_data->t_hoff + prefixlen,
                            newtup->t_len - newtup->t_data->t_hoff - prefixlen - suffixlen);
    }
 
        xlhdr_idx.t_infomask = old_key_tuple->t_data->t_infomask;
        xlhdr_idx.t_hoff = old_key_tuple->t_data->t_hoff;
 
-       XLogRegisterData((char *) &xlhdr_idx, SizeOfHeapHeader);
+       XLogRegisterData(&xlhdr_idx, SizeOfHeapHeader);
 
        /* PG73FORMAT: write bitmap [+ padding] [+ oid] + data */
        XLogRegisterData((char *) old_key_tuple->t_data + SizeofHeapTupleHeader,
     * called us certainly did, but that's WAL-logged separately.
     */
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec, SizeOfHeapNewCid);
+   XLogRegisterData(&xlrec, SizeOfHeapNewCid);
 
    /* will be looked at irrespective of origin */
 
 
        nplans = heap_log_freeze_plan(frozen, nfrozen, plans, frz_offsets);
 
        freeze_plans.nplans = nplans;
-       XLogRegisterBufData(0, (char *) &freeze_plans,
+       XLogRegisterBufData(0, &freeze_plans,
                            offsetof(xlhp_freeze_plans, plans));
-       XLogRegisterBufData(0, (char *) plans,
+       XLogRegisterBufData(0, plans,
                            sizeof(xlhp_freeze_plan) * nplans);
    }
    if (nredirected > 0)
        xlrec.flags |= XLHP_HAS_REDIRECTIONS;
 
        redirect_items.ntargets = nredirected;
-       XLogRegisterBufData(0, (char *) &redirect_items,
+       XLogRegisterBufData(0, &redirect_items,
                            offsetof(xlhp_prune_items, data));
-       XLogRegisterBufData(0, (char *) redirected,
+       XLogRegisterBufData(0, redirected,
                            sizeof(OffsetNumber[2]) * nredirected);
    }
    if (ndead > 0)
        xlrec.flags |= XLHP_HAS_DEAD_ITEMS;
 
        dead_items.ntargets = ndead;
-       XLogRegisterBufData(0, (char *) &dead_items,
+       XLogRegisterBufData(0, &dead_items,
                            offsetof(xlhp_prune_items, data));
-       XLogRegisterBufData(0, (char *) dead,
+       XLogRegisterBufData(0, dead,
                            sizeof(OffsetNumber) * ndead);
    }
    if (nunused > 0)
        xlrec.flags |= XLHP_HAS_NOW_UNUSED_ITEMS;
 
        unused_items.ntargets = nunused;
-       XLogRegisterBufData(0, (char *) &unused_items,
+       XLogRegisterBufData(0, &unused_items,
                            offsetof(xlhp_prune_items, data));
-       XLogRegisterBufData(0, (char *) unused,
+       XLogRegisterBufData(0, unused,
                            sizeof(OffsetNumber) * nunused);
    }
    if (nfrozen > 0)
-       XLogRegisterBufData(0, (char *) frz_offsets,
+       XLogRegisterBufData(0, frz_offsets,
                            sizeof(OffsetNumber) * nfrozen);
 
    /*
        Assert(nredirected == 0 && ndead == 0);
        /* also, any items in 'unused' must've been LP_DEAD previously */
    }
-   XLogRegisterData((char *) &xlrec, SizeOfHeapPrune);
+   XLogRegisterData(&xlrec, SizeOfHeapPrune);
    if (TransactionIdIsValid(conflict_xid))
-       XLogRegisterData((char *) &conflict_xid, sizeof(TransactionId));
+       XLogRegisterData(&conflict_xid, sizeof(TransactionId));
 
    switch (reason)
    {
 
        src->off += len;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) (&xlrec), sizeof(xlrec));
+       XLogRegisterData(&xlrec, sizeof(xlrec));
        XLogRegisterData(waldata_start, len);
 
        /* write xlog record */
 
 
        XLogBeginInsert();
        XLogRegisterBuffer(0, buf, REGBUF_STANDARD);
-       XLogRegisterData((char *) &xlrec_dedup, SizeOfBtreeDedup);
+       XLogRegisterData(&xlrec_dedup, SizeOfBtreeDedup);
 
        /*
         * The intervals array is not in the buffer, but pretend that it is.
         * When XLogInsert stores the whole buffer, the array need not be
         * stored too.
         */
-       XLogRegisterBufData(0, (char *) state->intervals,
+       XLogRegisterBufData(0, state->intervals,
                            state->nintervals * sizeof(BTDedupInterval));
 
        recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_DEDUP);
 
            xlrec.offnum = newitemoff;
 
            XLogBeginInsert();
-           XLogRegisterData((char *) &xlrec, SizeOfBtreeInsert);
+           XLogRegisterData(&xlrec, SizeOfBtreeInsert);
 
            if (isleaf && postingoff == 0)
            {
 
                    XLogRegisterBuffer(2, metabuf,
                                       REGBUF_WILL_INIT | REGBUF_STANDARD);
-                   XLogRegisterBufData(2, (char *) &xlmeta,
+                   XLogRegisterBufData(2, &xlmeta,
                                        sizeof(xl_btree_metadata));
                }
            }
            if (postingoff == 0)
            {
                /* Just log itup from caller */
-               XLogRegisterBufData(0, (char *) itup, IndexTupleSize(itup));
+               XLogRegisterBufData(0, itup, IndexTupleSize(itup));
            }
            else
            {
                 */
                upostingoff = postingoff;
 
-               XLogRegisterBufData(0, (char *) &upostingoff, sizeof(uint16));
-               XLogRegisterBufData(0, (char *) origitup,
+               XLogRegisterBufData(0, &upostingoff, sizeof(uint16));
+               XLogRegisterBufData(0, origitup,
                                    IndexTupleSize(origitup));
            }
 
            xlrec.postingoff = postingoff;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfBtreeSplit);
+       XLogRegisterData(&xlrec, SizeOfBtreeSplit);
 
        XLogRegisterBuffer(0, buf, REGBUF_STANDARD);
        XLogRegisterBuffer(1, rbuf, REGBUF_WILL_INIT);
         * newitem-logged case).
         */
        if (newitemonleft && xlrec.postingoff == 0)
-           XLogRegisterBufData(0, (char *) newitem, newitemsz);
+           XLogRegisterBufData(0, newitem, newitemsz);
        else if (xlrec.postingoff != 0)
        {
            Assert(isleaf);
            Assert(newitemonleft || firstrightoff == newitemoff);
            Assert(newitemsz == IndexTupleSize(orignewitem));
-           XLogRegisterBufData(0, (char *) orignewitem, newitemsz);
+           XLogRegisterBufData(0, orignewitem, newitemsz);
        }
 
        /* Log the left page's new high key */
            itemid = PageGetItemId(origpage, P_HIKEY);
            lefthighkey = (IndexTuple) PageGetItem(origpage, itemid);
        }
-       XLogRegisterBufData(0, (char *) lefthighkey,
+       XLogRegisterBufData(0, lefthighkey,
                            MAXALIGN(IndexTupleSize(lefthighkey)));
 
        /*
        xlrec.level = metad->btm_level;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfBtreeNewroot);
+       XLogRegisterData(&xlrec, SizeOfBtreeNewroot);
 
        XLogRegisterBuffer(0, rootbuf, REGBUF_WILL_INIT);
        XLogRegisterBuffer(1, lbuf, REGBUF_STANDARD);
        md.last_cleanup_num_delpages = metad->btm_last_cleanup_num_delpages;
        md.allequalimage = metad->btm_allequalimage;
 
-       XLogRegisterBufData(2, (char *) &md, sizeof(xl_btree_metadata));
+       XLogRegisterBufData(2, &md, sizeof(xl_btree_metadata));
 
        /*
         * Direct access to page is not good but faster - we should implement
 
        md.last_cleanup_num_delpages = num_delpages;
        md.allequalimage = metad->btm_allequalimage;
 
-       XLogRegisterBufData(0, (char *) &md, sizeof(xl_btree_metadata));
+       XLogRegisterBufData(0, &md, sizeof(xl_btree_metadata));
 
        recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_META_CLEANUP);
 
            md.last_cleanup_num_delpages = 0;
            md.allequalimage = metad->btm_allequalimage;
 
-           XLogRegisterBufData(2, (char *) &md, sizeof(xl_btree_metadata));
+           XLogRegisterBufData(2, &md, sizeof(xl_btree_metadata));
 
            xlrec.rootblk = rootblkno;
            xlrec.level = 0;
 
-           XLogRegisterData((char *) &xlrec, SizeOfBtreeNewroot);
+           XLogRegisterData(&xlrec, SizeOfBtreeNewroot);
 
            recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_NEWROOT);
 
                        RelationIsAccessibleInLogicalDecoding(heaprel);
 
                    XLogBeginInsert();
-                   XLogRegisterData((char *) &xlrec_reuse, SizeOfBtreeReusePage);
+                   XLogRegisterData(&xlrec_reuse, SizeOfBtreeReusePage);
 
                    XLogInsert(RM_BTREE_ID, XLOG_BTREE_REUSE_PAGE);
                }
 
        XLogBeginInsert();
        XLogRegisterBuffer(0, buf, REGBUF_STANDARD);
-       XLogRegisterData((char *) &xlrec_vacuum, SizeOfBtreeVacuum);
+       XLogRegisterData(&xlrec_vacuum, SizeOfBtreeVacuum);
 
        if (ndeletable > 0)
-           XLogRegisterBufData(0, (char *) deletable,
+           XLogRegisterBufData(0, deletable,
                                ndeletable * sizeof(OffsetNumber));
 
        if (nupdatable > 0)
        {
-           XLogRegisterBufData(0, (char *) updatedoffsets,
+           XLogRegisterBufData(0, updatedoffsets,
                                nupdatable * sizeof(OffsetNumber));
            XLogRegisterBufData(0, updatedbuf, updatedbuflen);
        }
 
        XLogBeginInsert();
        XLogRegisterBuffer(0, buf, REGBUF_STANDARD);
-       XLogRegisterData((char *) &xlrec_delete, SizeOfBtreeDelete);
+       XLogRegisterData(&xlrec_delete, SizeOfBtreeDelete);
 
        if (ndeletable > 0)
-           XLogRegisterBufData(0, (char *) deletable,
+           XLogRegisterBufData(0, deletable,
                                ndeletable * sizeof(OffsetNumber));
 
        if (nupdatable > 0)
        {
-           XLogRegisterBufData(0, (char *) updatedoffsets,
+           XLogRegisterBufData(0, updatedoffsets,
                                nupdatable * sizeof(OffsetNumber));
            XLogRegisterBufData(0, updatedbuf, updatedbuflen);
        }
        xlrec.leftblk = opaque->btpo_prev;
        xlrec.rightblk = opaque->btpo_next;
 
-       XLogRegisterData((char *) &xlrec, SizeOfBtreeMarkPageHalfDead);
+       XLogRegisterData(&xlrec, SizeOfBtreeMarkPageHalfDead);
 
        recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_MARK_PAGE_HALFDEAD);
 
        xlrec.leafrightsib = leafrightsib;
        xlrec.leaftopparent = leaftopparent;
 
-       XLogRegisterData((char *) &xlrec, SizeOfBtreeUnlinkPage);
+       XLogRegisterData(&xlrec, SizeOfBtreeUnlinkPage);
 
        if (BufferIsValid(metabuf))
        {
            xlmeta.last_cleanup_num_delpages = metad->btm_last_cleanup_num_delpages;
            xlmeta.allequalimage = metad->btm_allequalimage;
 
-           XLogRegisterBufData(4, (char *) &xlmeta, sizeof(xl_btree_metadata));
+           XLogRegisterBufData(4, &xlmeta, sizeof(xl_btree_metadata));
            xlinfo = XLOG_BTREE_UNLINK_PAGE_META;
        }
        else
 
        int         flags;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, sizeof(xlrec));
-       XLogRegisterData((char *) leafTuple, leafTuple->size);
+       XLogRegisterData(&xlrec, sizeof(xlrec));
+       XLogRegisterData(leafTuple, leafTuple->size);
 
        flags = REGBUF_STANDARD;
        if (xlrec.newPage)
        xlrec.nodeI = parent->node;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfSpgxlogMoveLeafs);
-       XLogRegisterData((char *) toDelete,
+       XLogRegisterData(&xlrec, SizeOfSpgxlogMoveLeafs);
+       XLogRegisterData(toDelete,
                         sizeof(OffsetNumber) * nDelete);
-       XLogRegisterData((char *) toInsert,
+       XLogRegisterData(toInsert,
                         sizeof(OffsetNumber) * nInsert);
-       XLogRegisterData((char *) leafdata, leafptr - leafdata);
+       XLogRegisterData(leafdata, leafptr - leafdata);
 
        XLogRegisterBuffer(0, current->buffer, REGBUF_STANDARD);
        XLogRegisterBuffer(1, nbuf, REGBUF_STANDARD | (xlrec.newPage ? REGBUF_WILL_INIT : 0));
        XLogBeginInsert();
 
        xlrec.nInsert = nToInsert;
-       XLogRegisterData((char *) &xlrec, SizeOfSpgxlogPickSplit);
+       XLogRegisterData(&xlrec, SizeOfSpgxlogPickSplit);
 
-       XLogRegisterData((char *) toDelete,
+       XLogRegisterData(toDelete,
                         sizeof(OffsetNumber) * xlrec.nDelete);
-       XLogRegisterData((char *) toInsert,
+       XLogRegisterData(toInsert,
                         sizeof(OffsetNumber) * xlrec.nInsert);
-       XLogRegisterData((char *) leafPageSelect,
+       XLogRegisterData(leafPageSelect,
                         sizeof(uint8) * xlrec.nInsert);
-       XLogRegisterData((char *) innerTuple, innerTuple->size);
+       XLogRegisterData(innerTuple, innerTuple->size);
        XLogRegisterData(leafdata, leafptr - leafdata);
 
        /* Old leaf page */
            XLogRecPtr  recptr;
 
            XLogBeginInsert();
-           XLogRegisterData((char *) &xlrec, sizeof(xlrec));
-           XLogRegisterData((char *) newInnerTuple, newInnerTuple->size);
+           XLogRegisterData(&xlrec, sizeof(xlrec));
+           XLogRegisterData(newInnerTuple, newInnerTuple->size);
 
            XLogRegisterBuffer(0, current->buffer, REGBUF_STANDARD);
 
            if (xlrec.parentBlk == 2)
                XLogRegisterBuffer(2, parent->buffer, REGBUF_STANDARD);
 
-           XLogRegisterData((char *) &xlrec, sizeof(xlrec));
-           XLogRegisterData((char *) newInnerTuple, newInnerTuple->size);
+           XLogRegisterData(&xlrec, sizeof(xlrec));
+           XLogRegisterData(newInnerTuple, newInnerTuple->size);
 
            recptr = XLogInsert(RM_SPGIST_ID, XLOG_SPGIST_ADD_NODE);
 
        XLogRecPtr  recptr;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, sizeof(xlrec));
-       XLogRegisterData((char *) prefixTuple, prefixTuple->size);
-       XLogRegisterData((char *) postfixTuple, postfixTuple->size);
+       XLogRegisterData(&xlrec, sizeof(xlrec));
+       XLogRegisterData(prefixTuple, prefixTuple->size);
+       XLogRegisterData(postfixTuple, postfixTuple->size);
 
        XLogRegisterBuffer(0, current->buffer, REGBUF_STANDARD);
        if (newBuffer != InvalidBuffer)
 
 
        STORE_STATE(&bds->spgstate, xlrec.stateSrc);
 
-       XLogRegisterData((char *) &xlrec, SizeOfSpgxlogVacuumLeaf);
+       XLogRegisterData(&xlrec, SizeOfSpgxlogVacuumLeaf);
        /* sizeof(xlrec) should be a multiple of sizeof(OffsetNumber) */
-       XLogRegisterData((char *) toDead, sizeof(OffsetNumber) * xlrec.nDead);
-       XLogRegisterData((char *) toPlaceholder, sizeof(OffsetNumber) * xlrec.nPlaceholder);
-       XLogRegisterData((char *) moveSrc, sizeof(OffsetNumber) * xlrec.nMove);
-       XLogRegisterData((char *) moveDest, sizeof(OffsetNumber) * xlrec.nMove);
-       XLogRegisterData((char *) chainSrc, sizeof(OffsetNumber) * xlrec.nChain);
-       XLogRegisterData((char *) chainDest, sizeof(OffsetNumber) * xlrec.nChain);
+       XLogRegisterData(toDead, sizeof(OffsetNumber) * xlrec.nDead);
+       XLogRegisterData(toPlaceholder, sizeof(OffsetNumber) * xlrec.nPlaceholder);
+       XLogRegisterData(moveSrc, sizeof(OffsetNumber) * xlrec.nMove);
+       XLogRegisterData(moveDest, sizeof(OffsetNumber) * xlrec.nMove);
+       XLogRegisterData(chainSrc, sizeof(OffsetNumber) * xlrec.nChain);
+       XLogRegisterData(chainDest, sizeof(OffsetNumber) * xlrec.nChain);
 
        XLogRegisterBuffer(0, buffer, REGBUF_STANDARD);
 
        /* Prepare WAL record */
        STORE_STATE(&bds->spgstate, xlrec.stateSrc);
 
-       XLogRegisterData((char *) &xlrec, SizeOfSpgxlogVacuumRoot);
+       XLogRegisterData(&xlrec, SizeOfSpgxlogVacuumRoot);
        /* sizeof(xlrec) should be a multiple of sizeof(OffsetNumber) */
-       XLogRegisterData((char *) toDelete,
+       XLogRegisterData(toDelete,
                         sizeof(OffsetNumber) * xlrec.nDelete);
 
        XLogRegisterBuffer(0, buffer, REGBUF_STANDARD);
 
        XLogBeginInsert();
 
-       XLogRegisterData((char *) &xlrec, SizeOfSpgxlogVacuumRedirect);
-       XLogRegisterData((char *) itemToPlaceholder,
+       XLogRegisterData(&xlrec, SizeOfSpgxlogVacuumRedirect);
+       XLogRegisterData(itemToPlaceholder,
                         sizeof(OffsetNumber) * xlrec.nToPlaceholder);
 
        XLogRegisterBuffer(0, buffer, REGBUF_STANDARD);
 
 WriteZeroPageXlogRec(int64 pageno)
 {
    XLogBeginInsert();
-   XLogRegisterData((char *) (&pageno), sizeof(pageno));
+   XLogRegisterData(&pageno, sizeof(pageno));
    (void) XLogInsert(RM_CLOG_ID, CLOG_ZEROPAGE);
 }
 
    xlrec.oldestXactDb = oldestXactDb;
 
    XLogBeginInsert();
-   XLogRegisterData((char *) (&xlrec), sizeof(xl_clog_truncate));
+   XLogRegisterData(&xlrec, sizeof(xl_clog_truncate));
    recptr = XLogInsert(RM_CLOG_ID, CLOG_TRUNCATE);
    XLogFlush(recptr);
 }
 
 WriteZeroPageXlogRec(int64 pageno)
 {
    XLogBeginInsert();
-   XLogRegisterData((char *) (&pageno), sizeof(pageno));
+   XLogRegisterData(&pageno, sizeof(pageno));
    (void) XLogInsert(RM_COMMIT_TS_ID, COMMIT_TS_ZEROPAGE);
 }
 
    xlrec.oldestXid = oldestXid;
 
    XLogBeginInsert();
-   XLogRegisterData((char *) (&xlrec), SizeOfCommitTsTruncate);
+   XLogRegisterData(&xlrec, SizeOfCommitTsTruncate);
    (void) XLogInsert(RM_COMMIT_TS_ID, COMMIT_TS_TRUNCATE);
 }
 
 
     * Not clear that it's worth the trouble though.
     */
    XLogBeginInsert();
-   XLogRegisterData((char *) (&xlrec), SizeOfMultiXactCreate);
-   XLogRegisterData((char *) members, nmembers * sizeof(MultiXactMember));
+   XLogRegisterData(&xlrec, SizeOfMultiXactCreate);
+   XLogRegisterData(members, nmembers * sizeof(MultiXactMember));
 
    (void) XLogInsert(RM_MULTIXACT_ID, XLOG_MULTIXACT_CREATE_ID);
 
 WriteMZeroPageXlogRec(int64 pageno, uint8 info)
 {
    XLogBeginInsert();
-   XLogRegisterData((char *) (&pageno), sizeof(pageno));
+   XLogRegisterData(&pageno, sizeof(pageno));
    (void) XLogInsert(RM_MULTIXACT_ID, info);
 }
 
    xlrec.endTruncMemb = endTruncMemb;
 
    XLogBeginInsert();
-   XLogRegisterData((char *) (&xlrec), SizeOfMultiXactTruncate);
+   XLogRegisterData(&xlrec, SizeOfMultiXactTruncate);
    recptr = XLogInsert(RM_MULTIXACT_ID, XLOG_MULTIXACT_TRUNCATE_ID);
    XLogFlush(recptr);
 }
 
            xlrec.nsubxacts = nUnreportedXids;
 
            XLogBeginInsert();
-           XLogRegisterData((char *) &xlrec, MinSizeOfXactAssignment);
-           XLogRegisterData((char *) unreportedXids,
+           XLogRegisterData(&xlrec, MinSizeOfXactAssignment);
+           XLogRegisterData(unreportedXids,
                             nUnreportedXids * sizeof(TransactionId));
 
            (void) XLogInsert(RM_XACT_ID, XLOG_XACT_ASSIGNMENT);
 
    XLogBeginInsert();
 
-   XLogRegisterData((char *) (&xlrec), sizeof(xl_xact_commit));
+   XLogRegisterData(&xlrec, sizeof(xl_xact_commit));
 
    if (xl_xinfo.xinfo != 0)
-       XLogRegisterData((char *) (&xl_xinfo.xinfo), sizeof(xl_xinfo.xinfo));
+       XLogRegisterData(&xl_xinfo.xinfo, sizeof(xl_xinfo.xinfo));
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_DBINFO)
-       XLogRegisterData((char *) (&xl_dbinfo), sizeof(xl_dbinfo));
+       XLogRegisterData(&xl_dbinfo, sizeof(xl_dbinfo));
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_SUBXACTS)
    {
-       XLogRegisterData((char *) (&xl_subxacts),
+       XLogRegisterData(&xl_subxacts,
                         MinSizeOfXactSubxacts);
-       XLogRegisterData((char *) subxacts,
+       XLogRegisterData(subxacts,
                         nsubxacts * sizeof(TransactionId));
    }
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_RELFILELOCATORS)
    {
-       XLogRegisterData((char *) (&xl_relfilelocators),
+       XLogRegisterData(&xl_relfilelocators,
                         MinSizeOfXactRelfileLocators);
-       XLogRegisterData((char *) rels,
+       XLogRegisterData(rels,
                         nrels * sizeof(RelFileLocator));
    }
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_DROPPED_STATS)
    {
-       XLogRegisterData((char *) (&xl_dropped_stats),
+       XLogRegisterData(&xl_dropped_stats,
                         MinSizeOfXactStatsItems);
-       XLogRegisterData((char *) droppedstats,
+       XLogRegisterData(droppedstats,
                         ndroppedstats * sizeof(xl_xact_stats_item));
    }
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_INVALS)
    {
-       XLogRegisterData((char *) (&xl_invals), MinSizeOfXactInvals);
-       XLogRegisterData((char *) msgs,
+       XLogRegisterData(&xl_invals, MinSizeOfXactInvals);
+       XLogRegisterData(msgs,
                         nmsgs * sizeof(SharedInvalidationMessage));
    }
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_TWOPHASE)
    {
-       XLogRegisterData((char *) (&xl_twophase), sizeof(xl_xact_twophase));
+       XLogRegisterData(&xl_twophase, sizeof(xl_xact_twophase));
        if (xl_xinfo.xinfo & XACT_XINFO_HAS_GID)
            XLogRegisterData(twophase_gid, strlen(twophase_gid) + 1);
    }
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_ORIGIN)
-       XLogRegisterData((char *) (&xl_origin), sizeof(xl_xact_origin));
+       XLogRegisterData(&xl_origin, sizeof(xl_xact_origin));
 
    /* we allow filtering by xacts */
    XLogSetRecordFlags(XLOG_INCLUDE_ORIGIN);
 
    XLogBeginInsert();
 
-   XLogRegisterData((char *) (&xlrec), MinSizeOfXactAbort);
+   XLogRegisterData(&xlrec, MinSizeOfXactAbort);
 
    if (xl_xinfo.xinfo != 0)
-       XLogRegisterData((char *) (&xl_xinfo), sizeof(xl_xinfo));
+       XLogRegisterData(&xl_xinfo, sizeof(xl_xinfo));
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_DBINFO)
-       XLogRegisterData((char *) (&xl_dbinfo), sizeof(xl_dbinfo));
+       XLogRegisterData(&xl_dbinfo, sizeof(xl_dbinfo));
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_SUBXACTS)
    {
-       XLogRegisterData((char *) (&xl_subxacts),
+       XLogRegisterData(&xl_subxacts,
                         MinSizeOfXactSubxacts);
-       XLogRegisterData((char *) subxacts,
+       XLogRegisterData(subxacts,
                         nsubxacts * sizeof(TransactionId));
    }
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_RELFILELOCATORS)
    {
-       XLogRegisterData((char *) (&xl_relfilelocators),
+       XLogRegisterData(&xl_relfilelocators,
                         MinSizeOfXactRelfileLocators);
-       XLogRegisterData((char *) rels,
+       XLogRegisterData(rels,
                         nrels * sizeof(RelFileLocator));
    }
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_DROPPED_STATS)
    {
-       XLogRegisterData((char *) (&xl_dropped_stats),
+       XLogRegisterData(&xl_dropped_stats,
                         MinSizeOfXactStatsItems);
-       XLogRegisterData((char *) droppedstats,
+       XLogRegisterData(droppedstats,
                         ndroppedstats * sizeof(xl_xact_stats_item));
    }
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_TWOPHASE)
    {
-       XLogRegisterData((char *) (&xl_twophase), sizeof(xl_xact_twophase));
+       XLogRegisterData(&xl_twophase, sizeof(xl_xact_twophase));
        if (xl_xinfo.xinfo & XACT_XINFO_HAS_GID)
            XLogRegisterData(twophase_gid, strlen(twophase_gid) + 1);
    }
 
    if (xl_xinfo.xinfo & XACT_XINFO_HAS_ORIGIN)
-       XLogRegisterData((char *) (&xl_origin), sizeof(xl_xact_origin));
+       XLogRegisterData(&xl_origin, sizeof(xl_xact_origin));
 
    /* Include the replication origin */
    XLogSetRecordFlags(XLOG_INCLUDE_ORIGIN);
 
    {
        /* Include WAL level in record for WAL summarizer's benefit. */
        XLogBeginInsert();
-       XLogRegisterData((char *) &wal_level, sizeof(wal_level));
+       XLogRegisterData(&wal_level, sizeof(wal_level));
        (void) XLogInsert(RM_XLOG_ID, XLOG_CHECKPOINT_REDO);
 
        /*
     * Now insert the checkpoint record into XLOG.
     */
    XLogBeginInsert();
-   XLogRegisterData((char *) (&checkPoint), sizeof(checkPoint));
+   XLogRegisterData(&checkPoint, sizeof(checkPoint));
    recptr = XLogInsert(RM_XLOG_ID,
                        shutdown ? XLOG_CHECKPOINT_SHUTDOWN :
                        XLOG_CHECKPOINT_ONLINE);
    START_CRIT_SECTION();
 
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec, sizeof(xl_end_of_recovery));
+   XLogRegisterData(&xlrec, sizeof(xl_end_of_recovery));
    recptr = XLogInsert(RM_XLOG_ID, XLOG_END_OF_RECOVERY);
 
    XLogFlush(recptr);
    XLogBeginInsert();
    xlrec.overwritten_lsn = aborted_lsn;
    xlrec.overwrite_time = GetCurrentTimestamp();
-   XLogRegisterData((char *) &xlrec, sizeof(xl_overwrite_contrecord));
+   XLogRegisterData(&xlrec, sizeof(xl_overwrite_contrecord));
    recptr = XLogInsert(RM_XLOG_ID, XLOG_OVERWRITE_CONTRECORD);
 
    /* check that the record was inserted to the right place */
 XLogPutNextOid(Oid nextOid)
 {
    XLogBeginInsert();
-   XLogRegisterData((char *) (&nextOid), sizeof(Oid));
+   XLogRegisterData(&nextOid, sizeof(Oid));
    (void) XLogInsert(RM_XLOG_ID, XLOG_NEXTOID);
 
    /*
    strlcpy(xlrec.rp_name, rpName, MAXFNAMELEN);
 
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec, sizeof(xl_restore_point));
+   XLogRegisterData(&xlrec, sizeof(xl_restore_point));
 
    RecPtr = XLogInsert(RM_XLOG_ID, XLOG_RESTORE_POINT);
 
            xlrec.track_commit_timestamp = track_commit_timestamp;
 
            XLogBeginInsert();
-           XLogRegisterData((char *) &xlrec, sizeof(xlrec));
+           XLogRegisterData(&xlrec, sizeof(xlrec));
 
            recptr = XLogInsert(RM_XLOG_ID, XLOG_PARAMETER_CHANGE);
            XLogFlush(recptr);
    if (XLogStandbyInfoActive() && !recoveryInProgress)
    {
        XLogBeginInsert();
-       XLogRegisterData((char *) (&fullPageWrites), sizeof(bool));
+       XLogRegisterData(&fullPageWrites, sizeof(bool));
 
        XLogInsert(RM_XLOG_ID, XLOG_FPW_CHANGE);
    }
         * Write the backup-end xlog record
         */
        XLogBeginInsert();
-       XLogRegisterData((char *) (&state->startpoint),
+       XLogRegisterData(&state->startpoint,
                         sizeof(state->startpoint));
        state->stoppoint = XLogInsert(RM_XLOG_ID, XLOG_BACKUP_END);
 
 
    xlrec.forkNum = forkNum;
 
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec, sizeof(xlrec));
+   XLogRegisterData(&xlrec, sizeof(xlrec));
    XLogInsert(RM_SMGR_ID, XLOG_SMGR_CREATE | XLR_SPECIAL_REL_UPDATE);
 }
 
        xlrec.flags = SMGR_TRUNCATE_ALL;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, sizeof(xlrec));
+       XLogRegisterData(&xlrec, sizeof(xlrec));
 
        lsn = XLogInsert(RM_SMGR_ID,
                         XLOG_SMGR_TRUNCATE | XLR_SPECIAL_REL_UPDATE);
 
        xlrec.tablespace_id = tsid;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) (&xlrec),
+       XLogRegisterData(&xlrec,
                         sizeof(xl_dbase_create_wal_log_rec));
 
        (void) XLogInsert(RM_DBASE_ID, XLOG_DBASE_CREATE_WAL_LOG);
            xlrec.src_tablespace_id = srctablespace;
 
            XLogBeginInsert();
-           XLogRegisterData((char *) &xlrec,
+           XLogRegisterData(&xlrec,
                             sizeof(xl_dbase_create_file_copy_rec));
 
            (void) XLogInsert(RM_DBASE_ID,
            xlrec.src_tablespace_id = src_tblspcoid;
 
            XLogBeginInsert();
-           XLogRegisterData((char *) &xlrec,
+           XLogRegisterData(&xlrec,
                             sizeof(xl_dbase_create_file_copy_rec));
 
            (void) XLogInsert(RM_DBASE_ID,
        xlrec.ntablespaces = 1;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, sizeof(xl_dbase_drop_rec));
-       XLogRegisterData((char *) &src_tblspcoid, sizeof(Oid));
+       XLogRegisterData(&xlrec, sizeof(xl_dbase_drop_rec));
+       XLogRegisterData(&src_tblspcoid, sizeof(Oid));
 
        (void) XLogInsert(RM_DBASE_ID,
                          XLOG_DBASE_DROP | XLR_SPECIAL_REL_UPDATE);
        xlrec.ntablespaces = ntblspc;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, MinSizeOfDbaseDropRec);
-       XLogRegisterData((char *) tablespace_ids, ntblspc * sizeof(Oid));
+       XLogRegisterData(&xlrec, MinSizeOfDbaseDropRec);
+       XLogRegisterData(tablespace_ids, ntblspc * sizeof(Oid));
 
        (void) XLogInsert(RM_DBASE_ID,
                          XLOG_DBASE_DROP | XLR_SPECIAL_REL_UPDATE);
 
 
        xlrec.locator = rel->rd_locator;
 
-       XLogRegisterData((char *) &xlrec, sizeof(xl_seq_rec));
-       XLogRegisterData((char *) tuple->t_data, tuple->t_len);
+       XLogRegisterData(&xlrec, sizeof(xl_seq_rec));
+       XLogRegisterData(tuple->t_data, tuple->t_len);
 
        recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG);
 
 
        xlrec.locator = seqrel->rd_locator;
 
-       XLogRegisterData((char *) &xlrec, sizeof(xl_seq_rec));
-       XLogRegisterData((char *) seqdatatuple.t_data, seqdatatuple.t_len);
+       XLogRegisterData(&xlrec, sizeof(xl_seq_rec));
+       XLogRegisterData(seqdatatuple.t_data, seqdatatuple.t_len);
 
        recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG);
 
        XLogRegisterBuffer(0, buf, REGBUF_WILL_INIT);
 
        xlrec.locator = seqrel->rd_locator;
-       XLogRegisterData((char *) &xlrec, sizeof(xl_seq_rec));
-       XLogRegisterData((char *) seqdatatuple.t_data, seqdatatuple.t_len);
+       XLogRegisterData(&xlrec, sizeof(xl_seq_rec));
+       XLogRegisterData(seqdatatuple.t_data, seqdatatuple.t_len);
 
        recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG);
 
 
            xlrec.flags |= XLH_TRUNCATE_RESTART_SEQS;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, SizeOfHeapTruncate);
-       XLogRegisterData((char *) logrelids, list_length(relids_logged) * sizeof(Oid));
+       XLogRegisterData(&xlrec, SizeOfHeapTruncate);
+       XLogRegisterData(logrelids, list_length(relids_logged) * sizeof(Oid));
 
        XLogSetRecordFlags(XLOG_INCLUDE_ORIGIN);
 
 
        xlrec.ts_id = tablespaceoid;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec,
+       XLogRegisterData(&xlrec,
                         offsetof(xl_tblspc_create_rec, ts_path));
-       XLogRegisterData((char *) location, strlen(location) + 1);
+       XLogRegisterData(location, strlen(location) + 1);
 
        (void) XLogInsert(RM_TBLSPC_ID, XLOG_TBLSPC_CREATE);
    }
        xlrec.ts_id = tablespaceoid;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) &xlrec, sizeof(xl_tblspc_drop_rec));
+       XLogRegisterData(&xlrec, sizeof(xl_tblspc_drop_rec));
 
        (void) XLogInsert(RM_TBLSPC_ID, XLOG_TBLSPC_DROP);
    }
 
    xlrec.message_size = size;
 
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec, SizeOfLogicalMessage);
+   XLogRegisterData(&xlrec, SizeOfLogicalMessage);
    XLogRegisterData(prefix, xlrec.prefix_size);
    XLogRegisterData(message, size);
 
 
 
                xlrec.node_id = roident;
                XLogBeginInsert();
-               XLogRegisterData((char *) (&xlrec), sizeof(xlrec));
+               XLogRegisterData(&xlrec, sizeof(xlrec));
                XLogInsert(RM_REPLORIGIN_ID, XLOG_REPLORIGIN_DROP);
            }
 
        xlrec.force = go_backward;
 
        XLogBeginInsert();
-       XLogRegisterData((char *) (&xlrec), sizeof(xlrec));
+       XLogRegisterData(&xlrec, sizeof(xlrec));
 
        XLogInsert(RM_REPLORIGIN_ID, XLOG_REPLORIGIN_SET);
    }
 
    /* Header */
    XLogBeginInsert();
    XLogSetRecordFlags(XLOG_MARK_UNIMPORTANT);
-   XLogRegisterData((char *) (&xlrec), MinSizeOfXactRunningXacts);
+   XLogRegisterData(&xlrec, MinSizeOfXactRunningXacts);
 
    /* array of TransactionIds */
    if (xlrec.xcnt > 0)
-       XLogRegisterData((char *) CurrRunningXacts->xids,
+       XLogRegisterData(CurrRunningXacts->xids,
                         (xlrec.xcnt + xlrec.subxcnt) * sizeof(TransactionId));
 
    recptr = XLogInsert(RM_STANDBY_ID, XLOG_RUNNING_XACTS);
    xlrec.nlocks = nlocks;
 
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec, offsetof(xl_standby_locks, locks));
-   XLogRegisterData((char *) locks, nlocks * sizeof(xl_standby_lock));
+   XLogRegisterData(&xlrec, offsetof(xl_standby_locks, locks));
+   XLogRegisterData(locks, nlocks * sizeof(xl_standby_lock));
    XLogSetRecordFlags(XLOG_MARK_UNIMPORTANT);
 
    (void) XLogInsert(RM_STANDBY_ID, XLOG_STANDBY_LOCK);
 
    /* perform insertion */
    XLogBeginInsert();
-   XLogRegisterData((char *) (&xlrec), MinSizeOfInvalidations);
-   XLogRegisterData((char *) msgs,
+   XLogRegisterData(&xlrec, MinSizeOfInvalidations);
+   XLogRegisterData(msgs,
                     nmsgs * sizeof(SharedInvalidationMessage));
    XLogInsert(RM_STANDBY_ID, XLOG_INVALIDATIONS);
 }
 
 
        /* perform insertion */
        XLogBeginInsert();
-       XLogRegisterData((char *) (&xlrec), MinSizeOfXactInvals);
+       XLogRegisterData(&xlrec, MinSizeOfXactInvals);
        ProcessMessageSubGroupMulti(group, CatCacheMsgs,
-                                   XLogRegisterData((char *) msgs,
+                                   XLogRegisterData(msgs,
                                                     n * sizeof(SharedInvalidationMessage)));
        ProcessMessageSubGroupMulti(group, RelCacheMsgs,
-                                   XLogRegisterData((char *) msgs,
+                                   XLogRegisterData(msgs,
                                                     n * sizeof(SharedInvalidationMessage)));
        XLogInsert(RM_XACT_ID, XLOG_XACT_INVALIDATIONS);
    }
 
        xlrec.nbytes = sizeof(RelMapFile);
 
        XLogBeginInsert();
-       XLogRegisterData((char *) (&xlrec), MinSizeOfRelmapUpdate);
-       XLogRegisterData((char *) newmap, sizeof(RelMapFile));
+       XLogRegisterData(&xlrec, MinSizeOfRelmapUpdate);
+       XLogRegisterData(newmap, sizeof(RelMapFile));
 
        lsn = XLogInsert(RM_RELMAP_ID, XLOG_RELMAP_UPDATE);
 
 
    xlrec.message_size = len;
 
    XLogBeginInsert();
-   XLogRegisterData((char *) &xlrec, SizeOfTestCustomRmgrsMessage);
-   XLogRegisterData((char *) payload, len);
+   XLogRegisterData(&xlrec, SizeOfTestCustomRmgrsMessage);
+   XLogRegisterData(payload, len);
 
    /* Let's mark this record as unimportant, just in case. */
    XLogSetRecordFlags(XLOG_MARK_UNIMPORTANT);