From 3f9c1697dca0b4964f1f5ba624d361d4e0e53051 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 21 Feb 2020 19:49:44 +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. This change is simplified by having made stdint.h required (commit 957338418b69e9774ccc1bab59f765a62f0aa6f9). Before this it would have been more complicated because the ecpg test source files don't use the full pg_config.h. Reviewed-by: Tom Lane Discussion: https://www.postgresql.org/message-id/flat/5d398bbb-262a-5fed-d839-d0e5cff3c0d7%402ndquadrant.com --- .../ecpg/test/expected/thread-alloc.c | 41 ++++++------ .../ecpg/test/expected/thread-prep.c | 67 ++++++++++--------- .../ecpg/test/expected/thread-thread.c | 61 ++++++++--------- .../test/expected/thread-thread_implicit.c | 8 +-- src/interfaces/ecpg/test/thread/alloc.pgc | 7 +- src/interfaces/ecpg/test/thread/prep.pgc | 7 +- src/interfaces/ecpg/test/thread/thread.pgc | 7 +- .../ecpg/test/thread/thread_implicit.pgc | 8 +-- 8 files changed, 106 insertions(+), 100 deletions(-) diff --git a/src/interfaces/ecpg/test/expected/thread-alloc.c b/src/interfaces/ecpg/test/expected/thread-alloc.c index 9678ebe6fd6..37ef44ed94b 100644 --- a/src/interfaces/ecpg/test/expected/thread-alloc.c +++ b/src/interfaces/ecpg/test/expected/thread-alloc.c @@ -7,6 +7,7 @@ #define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y)) #line 1 "alloc.pgc" +#include #include #include "ecpg_config.h" @@ -100,7 +101,7 @@ struct sqlca_t *ECPGget_sqlca(void); #endif -#line 25 "alloc.pgc" +#line 26 "alloc.pgc" #line 1 "regression.h" @@ -110,14 +111,14 @@ struct sqlca_t *ECPGget_sqlca(void); -#line 26 "alloc.pgc" +#line 27 "alloc.pgc" /* exec sql whenever sqlerror sqlprint ; */ -#line 28 "alloc.pgc" +#line 29 "alloc.pgc" /* exec sql whenever not found sqlprint ; */ -#line 29 "alloc.pgc" +#line 30 "alloc.pgc" #ifdef WIN32 @@ -133,54 +134,54 @@ static void* fn(void* arg) -#line 40 "alloc.pgc" +#line 41 "alloc.pgc" int value ; -#line 41 "alloc.pgc" +#line 42 "alloc.pgc" char name [ 100 ] ; -#line 42 "alloc.pgc" +#line 43 "alloc.pgc" char ** r = NULL ; /* exec sql end declare section */ -#line 43 "alloc.pgc" +#line 44 "alloc.pgc" - value = (long)arg; + value = (intptr_t) arg; sprintf(name, "Connection: %d", value); { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , name, 0); -#line 48 "alloc.pgc" +#line 49 "alloc.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 48 "alloc.pgc" +#line 49 "alloc.pgc" { ECPGsetcommit(__LINE__, "on", NULL); -#line 49 "alloc.pgc" +#line 50 "alloc.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 49 "alloc.pgc" +#line 50 "alloc.pgc" for (i = 1; i <= REPEATS; ++i) { { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select relname from pg_class where relname = 'pg_class'", ECPGt_EOIT, ECPGt_char,&(r),(long)0,(long)0,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 52 "alloc.pgc" +#line 53 "alloc.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint(); -#line 52 "alloc.pgc" +#line 53 "alloc.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 52 "alloc.pgc" +#line 53 "alloc.pgc" free(r); r = NULL; } { ECPGdisconnect(__LINE__, name); -#line 56 "alloc.pgc" +#line 57 "alloc.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 56 "alloc.pgc" +#line 57 "alloc.pgc" return 0; @@ -188,7 +189,7 @@ if (sqlca.sqlcode < 0) sqlprint();} int main () { - int i; + intptr_t i; #ifdef WIN32 HANDLE threads[THREADS]; #else @@ -207,7 +208,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 98861d36f02..7cdf2505d3f 100644 --- a/src/interfaces/ecpg/test/expected/thread-prep.c +++ b/src/interfaces/ecpg/test/expected/thread-prep.c @@ -7,6 +7,7 @@ #define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y)) #line 1 "prep.pgc" +#include #include #include "ecpg_config.h" @@ -100,7 +101,7 @@ struct sqlca_t *ECPGget_sqlca(void); #endif -#line 25 "prep.pgc" +#line 26 "prep.pgc" #line 1 "regression.h" @@ -110,14 +111,14 @@ struct sqlca_t *ECPGget_sqlca(void); -#line 26 "prep.pgc" +#line 27 "prep.pgc" /* exec sql whenever sqlerror sqlprint ; */ -#line 28 "prep.pgc" +#line 29 "prep.pgc" /* exec sql whenever not found sqlprint ; */ -#line 29 "prep.pgc" +#line 30 "prep.pgc" #ifdef WIN32 @@ -133,64 +134,64 @@ static void* fn(void* arg) -#line 40 "prep.pgc" +#line 41 "prep.pgc" int value ; -#line 41 "prep.pgc" +#line 42 "prep.pgc" char name [ 100 ] ; -#line 42 "prep.pgc" +#line 43 "prep.pgc" char query [ 256 ] = "INSERT INTO T VALUES ( ? )" ; /* exec sql end declare section */ -#line 43 "prep.pgc" +#line 44 "prep.pgc" - value = (long)arg; + value = (intptr_t) arg; sprintf(name, "Connection: %d", value); { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , name, 0); -#line 48 "prep.pgc" +#line 49 "prep.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 48 "prep.pgc" +#line 49 "prep.pgc" { ECPGsetcommit(__LINE__, "on", NULL); -#line 49 "prep.pgc" +#line 50 "prep.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 49 "prep.pgc" +#line 50 "prep.pgc" for (i = 1; i <= REPEATS; ++i) { { ECPGprepare(__LINE__, NULL, 0, "i", query); -#line 52 "prep.pgc" +#line 53 "prep.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 52 "prep.pgc" +#line 53 "prep.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_execute, "i", ECPGt_int,&(value),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 53 "prep.pgc" +#line 54 "prep.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint(); -#line 53 "prep.pgc" +#line 54 "prep.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 53 "prep.pgc" +#line 54 "prep.pgc" } { ECPGdeallocate(__LINE__, 0, NULL, "i"); -#line 55 "prep.pgc" +#line 56 "prep.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 55 "prep.pgc" +#line 56 "prep.pgc" { ECPGdisconnect(__LINE__, name); -#line 56 "prep.pgc" +#line 57 "prep.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 56 "prep.pgc" +#line 57 "prep.pgc" return 0; @@ -198,7 +199,7 @@ if (sqlca.sqlcode < 0) sqlprint();} int main () { - int i; + intptr_t i; #ifdef WIN32 HANDLE threads[THREADS]; #else @@ -206,35 +207,35 @@ int main () #endif { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); -#line 70 "prep.pgc" - -if (sqlca.sqlcode < 0) sqlprint();} -#line 70 "prep.pgc" - - { ECPGsetcommit(__LINE__, "on", NULL); #line 71 "prep.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 71 "prep.pgc" - { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table if exists T", ECPGt_EOIT, ECPGt_EORT); + { ECPGsetcommit(__LINE__, "on", NULL); #line 72 "prep.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 72 "prep.pgc" - { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table T ( i int )", ECPGt_EOIT, ECPGt_EORT); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table if exists T", ECPGt_EOIT, ECPGt_EORT); #line 73 "prep.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 73 "prep.pgc" - { ECPGdisconnect(__LINE__, "CURRENT"); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table T ( i int )", ECPGt_EOIT, ECPGt_EORT); #line 74 "prep.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 74 "prep.pgc" + { ECPGdisconnect(__LINE__, "CURRENT"); +#line 75 "prep.pgc" + +if (sqlca.sqlcode < 0) sqlprint();} +#line 75 "prep.pgc" + #ifdef WIN32 for (i = 0; i < THREADS; ++i) @@ -248,7 +249,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 68f153e57c1..a7e401570a4 100644 --- a/src/interfaces/ecpg/test/expected/thread-thread.c +++ b/src/interfaces/ecpg/test/expected/thread-thread.c @@ -11,6 +11,7 @@ * Thread test program * by Philip Yarra & Lee Kindness. */ +#include #include #include "ecpg_config.h" @@ -37,7 +38,7 @@ main(void) -#line 23 "thread.pgc" +#line 24 "thread.pgc" void *test_thread(void *arg); @@ -52,14 +53,14 @@ int main() #else HANDLE *threads; #endif - int n; + intptr_t n; /* exec sql begin declare section */ -#line 39 "thread.pgc" +#line 40 "thread.pgc" int l_rows ; /* exec sql end declare section */ -#line 40 "thread.pgc" +#line 41 "thread.pgc" /* Do not switch on debug output for regression tests. The threads get executed in @@ -68,22 +69,22 @@ int main() /* setup test_thread table */ { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); } -#line 47 "thread.pgc" +#line 48 "thread.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table test_thread", ECPGt_EOIT, ECPGt_EORT);} -#line 48 "thread.pgc" +#line 49 "thread.pgc" /* DROP might fail */ { ECPGtrans(__LINE__, NULL, "commit");} -#line 49 "thread.pgc" +#line 50 "thread.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table test_thread ( tstamp timestamp not null default cast ( timeofday ( ) as timestamp ) , thread text not null , iteration integer not null , primary key ( thread , iteration ) )", ECPGt_EOIT, ECPGt_EORT);} -#line 54 "thread.pgc" +#line 55 "thread.pgc" { ECPGtrans(__LINE__, NULL, "commit");} -#line 55 "thread.pgc" +#line 56 "thread.pgc" { ECPGdisconnect(__LINE__, "CURRENT");} -#line 56 "thread.pgc" +#line 57 "thread.pgc" /* create, and start, threads */ @@ -96,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 @@ -115,18 +116,18 @@ int main() /* and check results */ { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); } -#line 86 "thread.pgc" +#line 87 "thread.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select count ( * ) from test_thread", ECPGt_EOIT, ECPGt_int,&(l_rows),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);} -#line 87 "thread.pgc" +#line 88 "thread.pgc" { ECPGtrans(__LINE__, NULL, "commit");} -#line 88 "thread.pgc" +#line 89 "thread.pgc" { ECPGdisconnect(__LINE__, "CURRENT");} -#line 89 "thread.pgc" +#line 90 "thread.pgc" if( l_rows == (nthreads * iterations) ) printf("Success.\n"); @@ -138,19 +139,19 @@ int main() void *test_thread(void *arg) { - long threadnum = (long)arg; + long threadnum = (intptr_t) arg; /* exec sql begin declare section */ -#line 103 "thread.pgc" +#line 104 "thread.pgc" int l_i ; -#line 104 "thread.pgc" +#line 105 "thread.pgc" char l_connection [ 128 ] ; /* exec sql end declare section */ -#line 105 "thread.pgc" +#line 106 "thread.pgc" /* build up connection name, and connect to database */ @@ -160,13 +161,13 @@ void *test_thread(void *arg) _snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum); #endif /* exec sql whenever sqlerror sqlprint ; */ -#line 113 "thread.pgc" +#line 114 "thread.pgc" { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , l_connection, 0); -#line 114 "thread.pgc" +#line 115 "thread.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 114 "thread.pgc" +#line 115 "thread.pgc" if( sqlca.sqlcode != 0 ) { @@ -174,10 +175,10 @@ if (sqlca.sqlcode < 0) sqlprint();} return NULL; } { ECPGtrans(__LINE__, l_connection, "begin"); -#line 120 "thread.pgc" +#line 121 "thread.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 120 "thread.pgc" +#line 121 "thread.pgc" /* insert into test_thread table */ @@ -188,10 +189,10 @@ if (sqlca.sqlcode < 0) sqlprint();} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_int,&(l_i),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 125 "thread.pgc" +#line 126 "thread.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 125 "thread.pgc" +#line 126 "thread.pgc" if( sqlca.sqlcode != 0 ) printf("%s: ERROR: insert failed!\n", l_connection); @@ -199,16 +200,16 @@ if (sqlca.sqlcode < 0) sqlprint();} /* all done */ { ECPGtrans(__LINE__, l_connection, "commit"); -#line 131 "thread.pgc" +#line 132 "thread.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 131 "thread.pgc" +#line 132 "thread.pgc" { ECPGdisconnect(__LINE__, l_connection); -#line 132 "thread.pgc" +#line 133 "thread.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 132 "thread.pgc" +#line 133 "thread.pgc" return NULL; } diff --git a/src/interfaces/ecpg/test/expected/thread-thread_implicit.c b/src/interfaces/ecpg/test/expected/thread-thread_implicit.c index d0352765486..6c7adb062c8 100644 --- a/src/interfaces/ecpg/test/expected/thread-thread_implicit.c +++ b/src/interfaces/ecpg/test/expected/thread-thread_implicit.c @@ -11,7 +11,7 @@ * Thread test program * by Lee Kindness. */ - +#include #include #include "ecpg_config.h" @@ -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 c44bc91d78f..c0021a737ed 100644 --- a/src/interfaces/ecpg/test/thread/alloc.pgc +++ b/src/interfaces/ecpg/test/thread/alloc.pgc @@ -1,3 +1,4 @@ +#include #include #include "ecpg_config.h" @@ -42,7 +43,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 +61,7 @@ static void* fn(void* arg) int main () { - int i; + intptr_t i; #ifdef WIN32 HANDLE threads[THREADS]; #else @@ -79,7 +80,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 bdf27e7d5aa..d7ecfd48555 100644 --- a/src/interfaces/ecpg/test/thread/prep.pgc +++ b/src/interfaces/ecpg/test/thread/prep.pgc @@ -1,3 +1,4 @@ +#include #include #include "ecpg_config.h" @@ -42,7 +43,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 +61,7 @@ static void* fn(void* arg) int main () { - int i; + intptr_t i; #ifdef WIN32 HANDLE threads[THREADS]; #else @@ -85,7 +86,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 0e3217ce63c..e149b91d976 100644 --- a/src/interfaces/ecpg/test/thread/thread.pgc +++ b/src/interfaces/ecpg/test/thread/thread.pgc @@ -2,6 +2,7 @@ * Thread test program * by Philip Yarra & Lee Kindness. */ +#include #include #include "ecpg_config.h" @@ -34,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; @@ -65,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 @@ -97,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; diff --git a/src/interfaces/ecpg/test/thread/thread_implicit.pgc b/src/interfaces/ecpg/test/thread/thread_implicit.pgc index bbc4d7783c1..3209da22bc5 100644 --- a/src/interfaces/ecpg/test/thread/thread_implicit.pgc +++ b/src/interfaces/ecpg/test/thread/thread_implicit.pgc @@ -2,7 +2,7 @@ * Thread test program * by Lee Kindness. */ - +#include #include #include "ecpg_config.h" @@ -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.39.5