Suppress implicit-conversion warnings seen with newer clang versions.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 28 Mar 2017 17:16:19 +0000 (13:16 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 28 Mar 2017 17:16:19 +0000 (13:16 -0400)
We were assigning values near 255 through "char *" pointers.  On machines
where char is signed, that's not entirely kosher, and it's reasonable
for compilers to warn about it.

A better solution would be to change the pointer type to "unsigned char *",
but that would be vastly more invasive.  For the moment, let's just apply
this simple backpatchable solution.

Aleksander Alekseev

Discussion: https://postgr.es/m/20170220141239.GD12278@e733.localdomain
Discussion: https://postgr.es/m/2839.1490714708@sss.pgh.pa.us

src/backend/access/transam/xlog.c
src/backend/access/transam/xloginsert.c
src/bin/pg_resetwal/pg_resetwal.c

index 61ca81d1d2437328deec23462651677a87c786d9..25fa5443de4a5d2bbeefff6785071b1b91ffa2de 100644 (file)
@@ -5044,7 +5044,7 @@ BootStrapXLOG(void)
    record->xl_rmid = RM_XLOG_ID;
    recptr += SizeOfXLogRecord;
    /* fill the XLogRecordDataHeaderShort struct */
-   *(recptr++) = XLR_BLOCK_ID_DATA_SHORT;
+   *(recptr++) = (char) XLR_BLOCK_ID_DATA_SHORT;
    *(recptr++) = sizeof(checkPoint);
    memcpy(recptr, &checkPoint, sizeof(checkPoint));
    recptr += sizeof(checkPoint);
index 03b05f937f024db731dad68fbabcc50ed4a2d669..a3bd0b7f51a064557230f12338b2c73fc49cacb0 100644 (file)
@@ -739,7 +739,7 @@ XLogRecordAssemble(RmgrId rmid, uint8 info,
    if ((curinsert_flags & XLOG_INCLUDE_ORIGIN) &&
        replorigin_session_origin != InvalidRepOriginId)
    {
-       *(scratch++) = XLR_BLOCK_ID_ORIGIN;
+       *(scratch++) = (char) XLR_BLOCK_ID_ORIGIN;
        memcpy(scratch, &replorigin_session_origin, sizeof(replorigin_session_origin));
        scratch += sizeof(replorigin_session_origin);
    }
@@ -749,13 +749,13 @@ XLogRecordAssemble(RmgrId rmid, uint8 info,
    {
        if (mainrdata_len > 255)
        {
-           *(scratch++) = XLR_BLOCK_ID_DATA_LONG;
+           *(scratch++) = (char) XLR_BLOCK_ID_DATA_LONG;
            memcpy(scratch, &mainrdata_len, sizeof(uint32));
            scratch += sizeof(uint32);
        }
        else
        {
-           *(scratch++) = XLR_BLOCK_ID_DATA_SHORT;
+           *(scratch++) = (char) XLR_BLOCK_ID_DATA_SHORT;
            *(scratch++) = (uint8) mainrdata_len;
        }
        rdt_datas_last->next = mainrdata_head;
index 27bd9b04e7c8fea31fec828cd8e577f26bc5fb7a..bcb9ed938f5d73767d41e0e8cf0da0340a2b09e8 100644 (file)
@@ -1095,7 +1095,7 @@ WriteEmptyXLOG(void)
    record->xl_rmid = RM_XLOG_ID;
 
    recptr += SizeOfXLogRecord;
-   *(recptr++) = XLR_BLOCK_ID_DATA_SHORT;
+   *(recptr++) = (char) XLR_BLOCK_ID_DATA_SHORT;
    *(recptr++) = sizeof(CheckPoint);
    memcpy(recptr, &ControlFile.checkPointCopy,
           sizeof(CheckPoint));