GCC reports various instances of

warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

and MSVC equivalently

warning C4312: 'type cast': conversion from 'int' to 'void *' of greater size
    warning C4311: 'type cast': pointer truncation from 'void *' to 'long'

in ECPG test files.  This is because void* and long are cast back and
forth, but on 64-bit Windows, these have different sizes.  Fix by
using intptr_t instead.

The code actually worked fine because the integer values in use are
all small.  So this is just to get the test code to compile warning-free.

--
Peter Eisentraut              http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From 9adfcbc45cbe968d1a1230bce7a2891e75038d84 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Thu, 13 Feb 2020 15:02:45 +0100
Subject: [PATCH] Fix compiler warnings on 64-bit Windows

GCC reports various instances of

warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

and MSVC equivalently

warning C4312: 'type cast': conversion from 'int' to 'void *' of greater size
warning C4311: 'type cast': pointer truncation from 'void *' to 'long'

in ECPG test files.  This is because void* and long are cast back and
forth, but on 64-bit Windows, these have different sizes.  Fix by
using intptr_t instead.

The code actually worked fine because the integer values in use are
all small.  So this is just to get the test code to compile warning-free.
---
 src/interfaces/ecpg/test/expected/thread-alloc.c          | 8 ++++----
 src/interfaces/ecpg/test/expected/thread-prep.c           | 8 ++++----
 src/interfaces/ecpg/test/expected/thread-thread.c         | 8 ++++----
 .../ecpg/test/expected/thread-thread_implicit.c           | 8 ++++----
 src/interfaces/ecpg/test/thread/alloc.pgc                 | 8 ++++----
 src/interfaces/ecpg/test/thread/prep.pgc                  | 8 ++++----
 src/interfaces/ecpg/test/thread/thread.pgc                | 8 ++++----
 src/interfaces/ecpg/test/thread/thread_implicit.pgc       | 8 ++++----
 8 files changed, 32 insertions(+), 32 deletions(-)

diff --git a/src/interfaces/ecpg/test/expected/thread-alloc.c 
b/src/interfaces/ecpg/test/expected/thread-alloc.c
index 9678ebe6fd..fdf06fe8e2 100644
--- a/src/interfaces/ecpg/test/expected/thread-alloc.c
+++ b/src/interfaces/ecpg/test/expected/thread-alloc.c
@@ -8,7 +8,7 @@
 
 #line 1 "alloc.pgc"
 #include <stdlib.h>
-#include "ecpg_config.h"
+#include "pg_config.h"
 
 #ifndef ENABLE_THREAD_SAFETY
 int
@@ -145,7 +145,7 @@ static void* fn(void* arg)
 #line 43 "alloc.pgc"
 
 
-       value = (long)arg;
+       value = (intptr_t) arg;
        sprintf(name, "Connection: %d", value);
 
        { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , name, 0); 
@@ -188,7 +188,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
 
 int main ()
 {
-       int i;
+       intptr_t i;
 #ifdef WIN32
        HANDLE threads[THREADS];
 #else
@@ -207,7 +207,7 @@ int main ()
                CloseHandle(threads[i]);
 #else
        for (i = 0; i < THREADS; ++i)
-               pthread_create(&threads[i], NULL, fn, (void *) (long) i);
+               pthread_create(&threads[i], NULL, fn, (void *) i);
        for (i = 0; i < THREADS; ++i)
                pthread_join(threads[i], NULL);
 #endif
diff --git a/src/interfaces/ecpg/test/expected/thread-prep.c 
b/src/interfaces/ecpg/test/expected/thread-prep.c
index 98861d36f0..988b3fc408 100644
--- a/src/interfaces/ecpg/test/expected/thread-prep.c
+++ b/src/interfaces/ecpg/test/expected/thread-prep.c
@@ -8,7 +8,7 @@
 
 #line 1 "prep.pgc"
 #include <stdlib.h>
-#include "ecpg_config.h"
+#include "pg_config.h"
 
 #ifndef ENABLE_THREAD_SAFETY
 int
@@ -145,7 +145,7 @@ static void* fn(void* arg)
 #line 43 "prep.pgc"
 
 
-       value = (long)arg;
+       value = (intptr_t) arg;
        sprintf(name, "Connection: %d", value);
 
        { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , name, 0); 
@@ -198,7 +198,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
 
 int main ()
 {
-       int i;
+       intptr_t i;
 #ifdef WIN32
        HANDLE threads[THREADS];
 #else
@@ -248,7 +248,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
                CloseHandle(threads[i]);
 #else
        for (i = 0; i < THREADS; ++i)
-               pthread_create(&threads[i], NULL, fn, (void *) (long) i);
+               pthread_create(&threads[i], NULL, fn, (void *) i);
        for (i = 0; i < THREADS; ++i)
                pthread_join(threads[i], NULL);
 #endif
diff --git a/src/interfaces/ecpg/test/expected/thread-thread.c 
b/src/interfaces/ecpg/test/expected/thread-thread.c
index 68f153e57c..2516c9f67a 100644
--- a/src/interfaces/ecpg/test/expected/thread-thread.c
+++ b/src/interfaces/ecpg/test/expected/thread-thread.c
@@ -12,7 +12,7 @@
  *     by Philip Yarra & Lee Kindness.
  */
 #include <stdlib.h>
-#include "ecpg_config.h"
+#include "pg_config.h"
 
 #ifndef ENABLE_THREAD_SAFETY
 int
@@ -52,7 +52,7 @@ int main()
 #else
   HANDLE *threads;
 #endif
-  int n;
+  intptr_t n;
   /* exec sql begin declare section */
    
   
@@ -96,7 +96,7 @@ int main()
   for( n = 0; n < nthreads; n++ )
     {
 #ifndef WIN32
-      pthread_create(&threads[n], NULL, test_thread, (void *) (long) (n + 1));
+      pthread_create(&threads[n], NULL, test_thread, (void *) (n + 1));
 #else
       threads[n] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)test_thread, 
(void *) (n + 1), 0, NULL);
 #endif
@@ -138,7 +138,7 @@ int main()
 
 void *test_thread(void *arg)
 {
-  long threadnum = (long)arg;
+  long threadnum = (intptr_t) arg;
 
   /* exec sql begin declare section */
     
diff --git a/src/interfaces/ecpg/test/expected/thread-thread_implicit.c 
b/src/interfaces/ecpg/test/expected/thread-thread_implicit.c
index d035276548..9c5b1deb57 100644
--- a/src/interfaces/ecpg/test/expected/thread-thread_implicit.c
+++ b/src/interfaces/ecpg/test/expected/thread-thread_implicit.c
@@ -13,7 +13,7 @@
  */
 
 #include <stdlib.h>
-#include "ecpg_config.h"
+#include "pg_config.h"
 
 #ifndef ENABLE_THREAD_SAFETY
 int
@@ -53,7 +53,7 @@ int main()
 #else
   HANDLE *threads;
 #endif
-  int n;
+  intptr_t n;
   /* exec sql begin declare section */
    
   
@@ -97,7 +97,7 @@ int main()
   for( n = 0; n < nthreads; n++ )
     {
 #ifndef WIN32
-      pthread_create(&threads[n], NULL, test_thread, (void *) (long) (n + 1));
+      pthread_create(&threads[n], NULL, test_thread, (void *) (n + 1));
 #else
       threads[n] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) test_thread, 
(void *) (n+1), 0, NULL);
 #endif
@@ -139,7 +139,7 @@ int main()
 
 void *test_thread(void *arg)
 {
-  long threadnum = (long)arg;
+  long threadnum = (intptr_t) arg;
 
   /* exec sql begin declare section */
     
diff --git a/src/interfaces/ecpg/test/thread/alloc.pgc 
b/src/interfaces/ecpg/test/thread/alloc.pgc
index c44bc91d78..bc20033f01 100644
--- a/src/interfaces/ecpg/test/thread/alloc.pgc
+++ b/src/interfaces/ecpg/test/thread/alloc.pgc
@@ -1,5 +1,5 @@
 #include <stdlib.h>
-#include "ecpg_config.h"
+#include "pg_config.h"
 
 #ifndef ENABLE_THREAD_SAFETY
 int
@@ -42,7 +42,7 @@ static void* fn(void* arg)
        char **r = NULL;
        EXEC SQL END DECLARE SECTION;
 
-       value = (long)arg;
+       value = (intptr_t) arg;
        sprintf(name, "Connection: %d", value);
 
        EXEC SQL CONNECT TO REGRESSDB1 AS :name;
@@ -60,7 +60,7 @@ static void* fn(void* arg)
 
 int main ()
 {
-       int i;
+       intptr_t i;
 #ifdef WIN32
        HANDLE threads[THREADS];
 #else
@@ -79,7 +79,7 @@ int main ()
                CloseHandle(threads[i]);
 #else
        for (i = 0; i < THREADS; ++i)
-               pthread_create(&threads[i], NULL, fn, (void *) (long) i);
+               pthread_create(&threads[i], NULL, fn, (void *) i);
        for (i = 0; i < THREADS; ++i)
                pthread_join(threads[i], NULL);
 #endif
diff --git a/src/interfaces/ecpg/test/thread/prep.pgc 
b/src/interfaces/ecpg/test/thread/prep.pgc
index bdf27e7d5a..583114b4cc 100644
--- a/src/interfaces/ecpg/test/thread/prep.pgc
+++ b/src/interfaces/ecpg/test/thread/prep.pgc
@@ -1,5 +1,5 @@
 #include <stdlib.h>
-#include "ecpg_config.h"
+#include "pg_config.h"
 
 #ifndef ENABLE_THREAD_SAFETY
 int
@@ -42,7 +42,7 @@ static void* fn(void* arg)
        char query[256] = "INSERT INTO T VALUES ( ? )";
        EXEC SQL END DECLARE SECTION;
 
-       value = (long)arg;
+       value = (intptr_t) arg;
        sprintf(name, "Connection: %d", value);
 
        EXEC SQL CONNECT TO REGRESSDB1 AS :name;
@@ -60,7 +60,7 @@ static void* fn(void* arg)
 
 int main ()
 {
-       int i;
+       intptr_t i;
 #ifdef WIN32
        HANDLE threads[THREADS];
 #else
@@ -85,7 +85,7 @@ int main ()
                CloseHandle(threads[i]);
 #else
        for (i = 0; i < THREADS; ++i)
-               pthread_create(&threads[i], NULL, fn, (void *) (long) i);
+               pthread_create(&threads[i], NULL, fn, (void *) i);
        for (i = 0; i < THREADS; ++i)
                pthread_join(threads[i], NULL);
 #endif
diff --git a/src/interfaces/ecpg/test/thread/thread.pgc 
b/src/interfaces/ecpg/test/thread/thread.pgc
index 0e3217ce63..f5d55e42f7 100644
--- a/src/interfaces/ecpg/test/thread/thread.pgc
+++ b/src/interfaces/ecpg/test/thread/thread.pgc
@@ -3,7 +3,7 @@
  *     by Philip Yarra & Lee Kindness.
  */
 #include <stdlib.h>
-#include "ecpg_config.h"
+#include "pg_config.h"
 
 #ifndef ENABLE_THREAD_SAFETY
 int
@@ -34,7 +34,7 @@ int main()
 #else
   HANDLE *threads;
 #endif
-  int n;
+  intptr_t n;
   EXEC SQL BEGIN DECLARE SECTION;
   int l_rows;
   EXEC SQL END DECLARE SECTION;
@@ -65,7 +65,7 @@ int main()
   for( n = 0; n < nthreads; n++ )
     {
 #ifndef WIN32
-      pthread_create(&threads[n], NULL, test_thread, (void *) (long) (n + 1));
+      pthread_create(&threads[n], NULL, test_thread, (void *) (n + 1));
 #else
       threads[n] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)test_thread, 
(void *) (n + 1), 0, NULL);
 #endif
@@ -97,7 +97,7 @@ int main()
 
 void *test_thread(void *arg)
 {
-  long threadnum = (long)arg;
+  long threadnum = (intptr_t) arg;
 
   EXEC SQL BEGIN DECLARE SECTION;
   int  l_i;
diff --git a/src/interfaces/ecpg/test/thread/thread_implicit.pgc 
b/src/interfaces/ecpg/test/thread/thread_implicit.pgc
index bbc4d7783c..b7dd555348 100644
--- a/src/interfaces/ecpg/test/thread/thread_implicit.pgc
+++ b/src/interfaces/ecpg/test/thread/thread_implicit.pgc
@@ -4,7 +4,7 @@
  */
 
 #include <stdlib.h>
-#include "ecpg_config.h"
+#include "pg_config.h"
 
 #ifndef ENABLE_THREAD_SAFETY
 int
@@ -35,7 +35,7 @@ int main()
 #else
   HANDLE *threads;
 #endif
-  int n;
+  intptr_t n;
   EXEC SQL BEGIN DECLARE SECTION;
   int l_rows;
   EXEC SQL END DECLARE SECTION;
@@ -66,7 +66,7 @@ int main()
   for( n = 0; n < nthreads; n++ )
     {
 #ifndef WIN32
-      pthread_create(&threads[n], NULL, test_thread, (void *) (long) (n + 1));
+      pthread_create(&threads[n], NULL, test_thread, (void *) (n + 1));
 #else
       threads[n] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) test_thread, 
(void *) (n+1), 0, NULL);
 #endif
@@ -98,7 +98,7 @@ int main()
 
 void *test_thread(void *arg)
 {
-  long threadnum = (long)arg;
+  long threadnum = (intptr_t) arg;
 
   EXEC SQL BEGIN DECLARE SECTION;
   int  l_i;
-- 
2.25.0

Reply via email to