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]