Changeset: f11f68ec95f9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f11f68ec95f9
Modified Files:
        monetdb5/mal/mal.h
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_module.c
        monetdb5/mal/mal_prelude.c
        monetdb5/mal/mal_session.c
        monetdb5/modules/mal/manifold.c
        sql/backends/monet5/sql.c
Branch: Jun2023
Log Message:

Avoid casting non-varargs functions to varargs function pointer types.


diffs (300 lines):

diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -105,7 +105,7 @@ mal_export const char *mal_version(void)
 #define VARRETS 2
 
 typedef int malType;
-typedef str (*MALfcn) (ptr v, ...);
+typedef void *MALfcn;
 
 typedef struct SYMDEF {
        struct SYMDEF *peer;            /* where to look next */
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -47,32 +47,32 @@ malCommandCall(MalStkPtr stk, InstrPtr p
 
        switch (pci->argc) {
        case 0:
-               ret = (*(str (*)())pci->fcn)();
+               ret = (*(str (*)(void))pci->fcn)();
                break;
        case 1:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *))pci->fcn)(
                        getArgReference(stk, pci, 0));
                break;
        case 2:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1));
                break;
        case 3:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2));
                break;
        case 4:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
                        getArgReference(stk, pci, 3));
                break;
        case 5:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void 
*))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -80,7 +80,7 @@ malCommandCall(MalStkPtr stk, InstrPtr p
                        getArgReference(stk, pci, 4));
                break;
        case 6:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void *, void 
*))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -89,7 +89,7 @@ malCommandCall(MalStkPtr stk, InstrPtr p
                        getArgReference(stk, pci, 5));
                break;
        case 7:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void *, void 
*, void *))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -99,7 +99,7 @@ malCommandCall(MalStkPtr stk, InstrPtr p
                        getArgReference(stk, pci, 6));
                break;
        case 8:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void *, void 
*, void *, void *))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -110,7 +110,7 @@ malCommandCall(MalStkPtr stk, InstrPtr p
                        getArgReference(stk, pci, 7));
                break;
        case 9:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void *, void 
*, void *, void *, void *))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -122,7 +122,7 @@ malCommandCall(MalStkPtr stk, InstrPtr p
                        getArgReference(stk, pci, 8));
                break;
        case 10:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void *, void 
*, void *, void *, void *, void *))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -135,7 +135,7 @@ malCommandCall(MalStkPtr stk, InstrPtr p
                        getArgReference(stk, pci, 9));
                break;
        case 11:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void *, void 
*, void *, void *, void *, void *, void *))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -149,7 +149,7 @@ malCommandCall(MalStkPtr stk, InstrPtr p
                        getArgReference(stk, pci, 10));
                break;
        case 12:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void *, void 
*, void *, void *, void *, void *, void *, void *))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -164,7 +164,7 @@ malCommandCall(MalStkPtr stk, InstrPtr p
                        getArgReference(stk, pci, 11));
                break;
        case 13:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void *, void 
*, void *, void *, void *, void *, void *, void *, void *))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -180,7 +180,7 @@ malCommandCall(MalStkPtr stk, InstrPtr p
                        getArgReference(stk, pci, 12));
                break;
        case 14:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void *, void 
*, void *, void *, void *, void *, void *, void *, void *, void *))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -197,7 +197,7 @@ malCommandCall(MalStkPtr stk, InstrPtr p
                        getArgReference(stk, pci, 13));
                break;
        case 15:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void *, void 
*, void *, void *, void *, void *, void *, void *, void *, void *, void 
*))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -215,7 +215,7 @@ malCommandCall(MalStkPtr stk, InstrPtr p
                        getArgReference(stk, pci, 14));
                break;
        case 16:
-               ret = (*pci->fcn)(
+               ret = (*(str (*)(void *, void *, void *, void *, void *, void 
*, void *, void *, void *, void *, void *, void *, void *, void *, void *, void 
*))pci->fcn)(
                        getArgReference(stk, pci, 0),
                        getArgReference(stk, pci, 1),
                        getArgReference(stk, pci, 2),
@@ -643,7 +643,7 @@ runMALsequence(Client cntxt, MalBlkPtr m
                                ret = createException(MAL,"mal.interpreter", 
"address of pattern %s.%s missing", pci->modname, pci->fcnname);
                        } else {
                                TRC_DEBUG(ALGO, "calling %s.%s\n", pci->modname 
? pci->modname : "<null>", pci->fcnname ? pci->fcnname : "<null>");
-                               ret = (*pci->fcn)(cntxt, mb, stk, pci);
+                               ret = (*(str (*)(Client, MalBlkPtr, MalStkPtr, 
InstrPtr))pci->fcn)(cntxt, mb, stk, pci);
 #ifndef NDEBUG
                                if (ret == MAL_SUCCEED) {
                                        /* check that the types of actual 
results match
diff --git a/monetdb5/mal/mal_module.c b/monetdb5/mal/mal_module.c
--- a/monetdb5/mal/mal_module.c
+++ b/monetdb5/mal/mal_module.c
@@ -280,7 +280,7 @@ void freeModule(Module m)
                        str ret = MAL_SUCCEED;
 
                        assert(pci->fcn != NULL);
-                       ret = (*pci->fcn)(&status);
+                       ret = (*(str (*)(int *))pci->fcn)(&status);
                        freeException(ret);
                        (void)status;
                }
diff --git a/monetdb5/mal/mal_prelude.c b/monetdb5/mal/mal_prelude.c
--- a/monetdb5/mal/mal_prelude.c
+++ b/monetdb5/mal/mal_prelude.c
@@ -91,7 +91,7 @@ initModule(Client c, const char *name, c
                                int ret = 0;
 
                                assert(pci->fcn != NULL);
-                               msg = (*pci->fcn)(&ret);
+                               msg = (*(str (*)(int *))pci->fcn)(&ret);
                                (void)ret;
                        } else if (pci && pci->token == PATTERNsymbol) {
                                void *mb = NULL;
@@ -105,7 +105,7 @@ initModule(Client c, const char *name, c
                                         * string in order to check that in the 
callee */
                                        mb = (void *) mercurial_revision();
                                }
-                               msg = (*pci->fcn)(c, mb, NULL, NULL);
+                               msg = (*(str (*)(Client, MalBlkPtr, MalStkPtr, 
InstrPtr))pci->fcn)(c, mb, NULL, NULL);
                        }
                }
        }
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -915,7 +915,7 @@ optimizeMALBlock(Client cntxt, MalBlkPtr
                p = getInstrPtr(mb, pc);
                if (getModuleId(p) == optimizerRef && p->fcn && p->token != 
REMsymbol) {
                        actions++;
-                       msg = (str) (*p->fcn) (cntxt, mb, 0, p);
+                       msg = (*(str (*)(Client, MalBlkPtr, MalStkPtr, 
InstrPtr))p->fcn)(cntxt, mb, 0, p);
                        if (msg) {
                                str place = getExceptionPlace(msg);
                                str nmsg = NULL;
diff --git a/monetdb5/modules/mal/manifold.c b/monetdb5/modules/mal/manifold.c
--- a/monetdb5/modules/mal/manifold.c
+++ b/monetdb5/modules/mal/manifold.c
@@ -55,11 +55,16 @@ typedef struct{
 
 // Loop through the first BAT
 // keep the last error message received
-#define ManifoldLoop(Type, ...)                                                
                                        \
+#define MALfcn1(Type) (str (*) (Type *, void *))
+#define MALfcn2(Type) (str (*) (Type *, void *, void *))
+#define MALfcn3(Type) (str (*) (Type *, void *, void *, void *))
+#define MALfcn4(Type) (str (*) (Type *, void *, void *, void *, void *))
+#define MALfcn5(Type) (str (*) (Type *, void *, void *, void *, void *, void 
*))
+#define ManifoldLoop(N, Type, ...)                                             
                                \
        do {                                                                    
                                                        \
                Type *v = (Type*) mut->args[0].first;                           
                        \
                for (;;) {                                                      
                                                        \
-                       msg = (*((str (*)(Type *, ...))mut->pci->fcn))(v, 
__VA_ARGS__);                                         \
+                       msg = (*(MALfcn##N(Type) mut->pci->fcn))(v, 
__VA_ARGS__);                       \
                        if (msg) break;                                         
                                                \
                        if (++oo == olimit)                                     
                                                \
                                break;                                          
                                                        \
@@ -87,27 +92,27 @@ typedef struct{
 
 // The target BAT tail type determines the result variable
 #ifdef HAVE_HGE
-#define Manifoldbody_hge(...)                                  \
-       case TYPE_hge: ManifoldLoop(hge,__VA_ARGS__); break
+#define Manifoldbody_hge(N,...)                                                
                \
+       case TYPE_hge: ManifoldLoop(N,hge,__VA_ARGS__); break
 #else
-#define Manifoldbody_hge(...)
+#define Manifoldbody_hge(N,...)
 #endif
-#define Manifoldbody(...)                                                      
                                        \
+#define Manifoldbody(N,...)                                                    
                                        \
        do {                                                                    
                                                        \
                switch(ATOMstorage(mut->args[0].b->ttype)){                     
                        \
-               case TYPE_bte: ManifoldLoop(bte,__VA_ARGS__); break;            
        \
-               case TYPE_sht: ManifoldLoop(sht,__VA_ARGS__); break;            
        \
-               case TYPE_int: ManifoldLoop(int,__VA_ARGS__); break;            
        \
-               case TYPE_lng: ManifoldLoop(lng,__VA_ARGS__); break;            
        \
-               Manifoldbody_hge(__VA_ARGS__);                                  
                                \
-               case TYPE_oid: ManifoldLoop(oid,__VA_ARGS__); break;            
        \
-               case TYPE_flt: ManifoldLoop(flt,__VA_ARGS__); break;            
        \
-               case TYPE_dbl: ManifoldLoop(dbl,__VA_ARGS__); break;            
        \
-               case TYPE_uuid: ManifoldLoop(uuid,__VA_ARGS__); break;          
        \
+               case TYPE_bte: ManifoldLoop(N,bte,__VA_ARGS__); break;          
        \
+               case TYPE_sht: ManifoldLoop(N,sht,__VA_ARGS__); break;          
        \
+               case TYPE_int: ManifoldLoop(N,int,__VA_ARGS__); break;          
        \
+               case TYPE_lng: ManifoldLoop(N,lng,__VA_ARGS__); break;          
        \
+               Manifoldbody_hge(N,__VA_ARGS__);                                
                                \
+               case TYPE_oid: ManifoldLoop(N,oid,__VA_ARGS__); break;          
        \
+               case TYPE_flt: ManifoldLoop(N,flt,__VA_ARGS__); break;          
        \
+               case TYPE_dbl: ManifoldLoop(N,dbl,__VA_ARGS__); break;          
        \
+               case TYPE_uuid: ManifoldLoop(N,uuid,__VA_ARGS__); break;        
        \
                case TYPE_str:                                                  
                                                \
                default: {                                                      
                                                        \
                        for (;;) {                                              
                                                        \
-                           msg = (*((str (*)(str *, ...))mut->pci->fcn))(&y, 
__VA_ARGS__);                                             \
+                           msg = (*(MALfcn##N(str) mut->pci->fcn))(&y, 
__VA_ARGS__); \
                                if (msg)                                        
                                                        \
                                        break;                                  
                                                        \
                                if (bunfastapp(mut->args[0].b, (void*) y) != 
GDK_SUCCEED) \
@@ -178,11 +183,11 @@ MANIFOLDjob(MULTItask *mut)
 
        // use limited argument list expansion.
        switch(mut->pci->argc){
-       case 4: Manifoldbody(args[3]); break;
-       case 5: Manifoldbody(args[3],args[4]); break;
-       case 6: Manifoldbody(args[3],args[4],args[5]); break;
-       case 7: Manifoldbody(args[3],args[4],args[5],args[6]); break;
-       case 8: Manifoldbody(args[3],args[4],args[5],args[6],args[7]); break;
+       case 4: Manifoldbody(1,args[3]); break;
+       case 5: Manifoldbody(2,args[3],args[4]); break;
+       case 6: Manifoldbody(3,args[3],args[4],args[5]); break;
+       case 7: Manifoldbody(4,args[3],args[4],args[5],args[6]); break;
+       case 8: Manifoldbody(5,args[3],args[4],args[5],args[6],args[7]); break;
        default:
                msg= createException(MAL,"mal.manifold","manifold call 
limitation ");
        }
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -4641,7 +4641,7 @@ SQLunionfunc(Client cntxt, MalBlkPtr mb,
                                if (!ret && ii == q->argc) {
                                        BAT *fres = NULL;
                                        if (!omb && npci->fcn)
-                                               ret = npci->fcn(cntxt, nmb, 
nstk, npci);
+                                               ret = (*(str (*)(Client, 
MalBlkPtr, MalStkPtr, InstrPtr))npci->fcn)(cntxt, nmb, nstk, npci);
                                        else
                                                ret = runMALsequence(cntxt, 
nmb, 1, nmb->stop, nstk, env /* copy result in nstk first instruction*/, q);
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to