Changeset: bce0fa4f6481 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/bce0fa4f6481
Branch: odbc_loader
Log Message:

merge with default


diffs (truncated from 1997 to 300 lines):

diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -834,3 +834,4 @@ ae474f7fda0a3f2ebefc6c0b2cd969ef0854fad1
 dce400b68239412b1835fb28bd183bf50f5e8692 Aug2024_3
 dce400b68239412b1835fb28bd183bf50f5e8692 Aug2024_release
 ab5d60be21cd1c65e9de476d71a86c2995f70785 Aug2024_5
+ab5d60be21cd1c65e9de476d71a86c2995f70785 Aug2024_SP1_release
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -20,7 +20,7 @@ BAT *BATasciify(BAT *b, BAT *s);
 void BATassertProps(BAT *b);
 atomDesc BATatoms[MAXATOMS];
 BAT *BATattach(int tt, const char *heapfile, role_t role);
-gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
const void *c1, const void *c2, bool li, bool hi, BUN estimate) 
__attribute__((__warn_unused_result__));
+gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
const void *c1, const void *c2, bool li, bool hi, BUN estimate) 
__attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__warn_unused_result__));
 BAT *BATcalcabsolute(BAT *b, BAT *s);
 BAT *BATcalcadd(BAT *b1, BAT *b2, BAT *s1, BAT *s2, int tp);
 BAT *BATcalcaddcst(BAT *b, const ValRecord *v, BAT *s, int tp);
@@ -122,11 +122,11 @@ BAT *BATdescriptor(bat i);
 BAT *BATdiff(BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, bool not_in, 
BUN estimate);
 BAT *BATdiffcand(BAT *a, BAT *b);
 gdk_return BATextend(BAT *b, BUN newcap) 
__attribute__((__warn_unused_result__));
-gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands, BAT *grps, 
BUN n, bool asc, bool nilslast, bool distinct) 
__attribute__((__warn_unused_result__));
+gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands, BAT *grps, 
BUN n, bool asc, bool nilslast, bool distinct) 
__attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__warn_unused_result__));
 restrict_t BATgetaccess(BAT *b);
 ValPtr BATgetprop(BAT *b, enum prop_t idx);
 ValPtr BATgetprop_nolock(BAT *b, enum prop_t idx);
-gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *s, 
BAT *g, BAT *e, BAT *h) __attribute__((__warn_unused_result__));
+gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *s, 
BAT *g, BAT *e, BAT *h) __attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__access__(write_only, 3))) 
__attribute__((__warn_unused_result__));
 const char *BATgroupaggrinit(BAT *b, BAT *g, BAT *e, BAT *s, oid *minp, oid 
*maxp, BUN *ngrpp, struct canditer *ci);
 gdk_return BATgroupavg(BAT **bnp, BAT **cntsp, BAT *b, BAT *g, BAT *e, BAT *s, 
int tp, bool skip_nils, int scale);
 gdk_return BATgroupavg3(BAT **avgp, BAT **remp, BAT **cntp, BAT *b, BAT *g, 
BAT *e, BAT *s, bool skip_nils);
@@ -155,10 +155,10 @@ bool BAThasstrimps(BAT *b);
 void BAThseqbase(BAT *b, oid o);
 BAT *BATintersect(BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, bool 
max_one, BUN estimate);
 BAT *BATintersectcand(BAT *a, BAT *b);
-gdk_return BATjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
bool nil_matches, BUN estimate) __attribute__((__warn_unused_result__));
+gdk_return BATjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
bool nil_matches, BUN estimate) __attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__warn_unused_result__));
 gdk_return BATkey(BAT *b, bool onoff);
-gdk_return BATleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
bool nil_matches, BUN estimate) __attribute__((__warn_unused_result__));
-gdk_return BATmarkjoin(BAT **r1p, BAT **r2p, BAT **r3p, BAT *l, BAT *r, BAT 
*sl, BAT *sr, BUN estimate) __attribute__((__warn_unused_result__));
+gdk_return BATleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
bool nil_matches, BUN estimate) __attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__warn_unused_result__));
+gdk_return BATmarkjoin(BAT **r1p, BAT **r2p, BAT **r3p, BAT *l, BAT *r, BAT 
*sl, BAT *sr, BUN estimate) __attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__access__(write_only, 3))) 
__attribute__((__warn_unused_result__));
 BAT *BATmaskedcands(oid hseq, BUN nr, BAT *masked, bool selected);
 void *BATmax(BAT *b, void *aggr);
 void *BATmax_skipnil(BAT *b, void *aggr, bit skipnil);
@@ -171,8 +171,8 @@ BAT *BATnil_grp(BAT *l, BAT *g, BAT *e, 
 bool BATordered(BAT *b);
 bool BATordered_rev(BAT *b);
 gdk_return BATorderidx(BAT *b, bool stable);
-gdk_return BAToutercross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT 
*sr, bool max_one) __attribute__((__warn_unused_result__));
-gdk_return BATouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT 
*sr, bool nil_matches, bool match_one, BUN estimate) 
__attribute__((__warn_unused_result__));
+gdk_return BAToutercross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT 
*sr, bool max_one) __attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__warn_unused_result__));
+gdk_return BATouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT 
*sr, bool nil_matches, bool match_one, BUN estimate) 
__attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__warn_unused_result__));
 gdk_return BATprint(stream *s, BAT *b);
 gdk_return BATprintcolumns(stream *s, int argc, BAT *argv[]);
 gdk_return BATprod(void *res, int tp, BAT *b, BAT *s, bool skip_nils, bool 
nil_if_empty);
@@ -188,7 +188,7 @@ BAT *BATsample(BAT *b, BUN n);
 BAT *BATsample_with_seed(BAT *b, BUN n, uint64_t seed);
 gdk_return BATsave(BAT *b) __attribute__((__warn_unused_result__));
 BAT *BATselect(BAT *b, BAT *s, const void *tl, const void *th, bool li, bool 
hi, bool anti, bool nil_matches);
-gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
bool nil_matches, bool max_one, BUN estimate) 
__attribute__((__warn_unused_result__));
+gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
bool nil_matches, bool max_one, BUN estimate) 
__attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__warn_unused_result__));
 BAT *BATsetaccess(BAT *b, restrict_t mode) 
__attribute__((__warn_unused_result__));
 void BATsetcapacity(BAT *b, BUN cnt);
 void BATsetcount(BAT *b, BUN cnt);
@@ -196,14 +196,14 @@ ValPtr BATsetprop(BAT *b, enum prop_t id
 ValPtr BATsetprop_nolock(BAT *b, enum prop_t idx, int type, const void *v);
 gdk_return BATsetstrimps(BAT *b);
 BAT *BATslice(BAT *b, BUN low, BUN high);
-gdk_return BATsort(BAT **sorted, BAT **order, BAT **groups, BAT *b, BAT *o, 
BAT *g, bool reverse, bool nilslast, bool stable) 
__attribute__((__warn_unused_result__));
+gdk_return BATsort(BAT **sorted, BAT **order, BAT **groups, BAT *b, BAT *o, 
BAT *g, bool reverse, bool nilslast, bool stable) 
__attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__access__(write_only, 3))) 
__attribute__((__warn_unused_result__));
 gdk_return BATstr_group_concat(ValPtr res, BAT *b, BAT *s, BAT *sep, bool 
skip_nils, bool nil_if_empty, const char *restrict separator);
-gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
bool max_one) __attribute__((__warn_unused_result__));
+gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
bool max_one) __attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__warn_unused_result__));
 BAT *BATsubexist(BAT *l, BAT *g, BAT *e, BAT *s);
 BAT *BATsubnot_exist(BAT *l, BAT *g, BAT *e, BAT *s);
 gdk_return BATsum(void *res, int tp, BAT *b, BAT *s, bool skip_nils, bool 
nil_if_empty);
 const char *BATtailname(const BAT *b);
-gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT 
*sr, int op, bool nil_matches, BUN estimate) 
__attribute__((__warn_unused_result__));
+gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT 
*sr, int op, bool nil_matches, BUN estimate) 
__attribute__((__access__(write_only, 1))) 
__attribute__((__access__(write_only, 2))) 
__attribute__((__warn_unused_result__));
 BAT *BATthetaselect(BAT *b, BAT *s, const void *val, const char *op);
 BAT *BATtolower(BAT *b, BAT *s);
 BAT *BATtoupper(BAT *b, BAT *s);
@@ -270,7 +270,7 @@ gdk_return GDKanalyticalsum(BAT *r, BAT 
 gdk_return GDKanalyticalwindowbounds(BAT *r, BAT *b, BAT *p, BAT *l, const 
void *restrict bound, int tp1, int tp2, int unit, bool preceding, oid 
first_half);
 gdk_return GDKasciify(char **restrict buf, size_t *restrict buflen, const char 
*restrict s);
 int GDKatomcnt;
-gdk_return GDKcasefold(char **restrict buf, size_t *restrict buflen, const 
char *restrict s);
+gdk_return GDKcasefold(char **restrict buf, size_t *restrict buflen, const 
char *restrict s) __attribute__((__access__(read_write, 1))) 
__attribute__((__access__(read_write, 2)));
 void GDKclrerr(void);
 gdk_return GDKcopyenv(BAT **key, BAT **val, bool writable);
 gdk_return GDKcreatedir(const char *nme);
@@ -326,8 +326,8 @@ char *GDKstrcasestr(const char *haystack
 str GDKstrdup(const char *s) __attribute__((__malloc__)) 
__attribute__((__warn_unused_result__));
 int GDKstrncasecmp(const char *str1, const char *str2, size_t l1, size_t l2);
 str GDKstrndup(const char *s, size_t n) __attribute__((__malloc__)) 
__attribute__((__warn_unused_result__));
-gdk_return GDKtolower(char **restrict buf, size_t *restrict buflen, const char 
*restrict s);
-gdk_return GDKtoupper(char **restrict buf, size_t *restrict buflen, const char 
*restrict s);
+gdk_return GDKtolower(char **restrict buf, size_t *restrict buflen, const char 
*restrict s) __attribute__((__access__(read_write, 1))) 
__attribute__((__access__(read_write, 2)));
+gdk_return GDKtoupper(char **restrict buf, size_t *restrict buflen, const char 
*restrict s) __attribute__((__access__(read_write, 1))) 
__attribute__((__access__(read_write, 2)));
 gdk_return GDKtracer_fill_comp_info(BAT *id, BAT *component, BAT *log_level);
 gdk_return GDKtracer_flush_buffer(void);
 const char *GDKtracer_get_component_level(const char *comp);
@@ -423,11 +423,11 @@ gdk_return TMsubcommit_list(bat *restric
 void VALclear(ValPtr v);
 int VALcmp(const ValRecord *p, const ValRecord *q);
 void *VALconvert(int typ, ValPtr t);
-ValPtr VALcopy(ValPtr dst, const ValRecord *src);
-void VALempty(ValPtr v);
+ValPtr VALcopy(ValPtr dst, const ValRecord *src) 
__attribute__((__access__(write_only, 1)));
+void VALempty(ValPtr v) __attribute__((__access__(write_only, 1)));
 char *VALformat(const ValRecord *res) __attribute__((__warn_unused_result__));
 void *VALget(ValPtr v);
-ValPtr VALinit(ValPtr d, int tpe, const void *s);
+ValPtr VALinit(ValPtr d, int tpe, const void *s) 
__attribute__((__access__(write_only, 1)));
 bool VALisnil(const ValRecord *v);
 ValPtr VALset(ValPtr v, int t, void *p);
 gdk_return VARcalcabsolute(ValPtr ret, const ValRecord *v);
@@ -473,15 +473,15 @@ size_t blobsize(size_t nitems) __attribu
 ssize_t bteFromStr(const char *src, size_t *len, bte **dst, bool external);
 ssize_t bteToStr(str *dst, size_t *len, const bte *src, bool external);
 const bte bte_nil;
-oid canditer_idx(const struct canditer *ci, BUN p);
-void canditer_init(struct canditer *ci, BAT *b, BAT *s);
-oid canditer_last(const struct canditer *ci);
-oid canditer_mask_next(const struct canditer *ci, oid o, bool next);
-oid canditer_peek(struct canditer *ci);
-oid canditer_peekprev(struct canditer *ci);
+oid canditer_idx(const struct canditer *ci, BUN p) __attribute__((__pure__));
+void canditer_init(struct canditer *ci, BAT *b, BAT *s) 
__attribute__((__access__(write_only, 1)));
+oid canditer_last(const struct canditer *ci) __attribute__((__pure__));
+oid canditer_mask_next(const struct canditer *ci, oid o, bool next) 
__attribute__((__pure__));
+oid canditer_peek(const struct canditer *ci) __attribute__((__pure__));
+oid canditer_peekprev(const struct canditer *ci) __attribute__((__pure__));
 oid canditer_prev(struct canditer *ci);
 void canditer_reset(struct canditer *ci);
-BUN canditer_search(const struct canditer *ci, oid o, bool next);
+BUN canditer_search(const struct canditer *ci, oid o, bool next) 
__attribute__((__pure__));
 void canditer_setidx(struct canditer *ci, BUN p);
 BAT *canditer_slice(const struct canditer *ci, BUN lo, BUN hi);
 BAT *canditer_slice2(const struct canditer *ci, BUN lo1, BUN hi1, BUN lo2, BUN 
hi2);
@@ -527,7 +527,7 @@ char *dlerror(void);
 void *dlopen(const char *file, int mode);
 void *dlsym(void *handle, const char *name);
 _Noreturn void eb_error(exception_buffer *eb, char *msg, int val);
-exception_buffer *eb_init(exception_buffer *eb);
+exception_buffer *eb_init(exception_buffer *eb) 
__attribute__((__access__(write_only, 1)));
 size_t escapedStr(char *restrict dst, const char *restrict src, size_t dstlen, 
const char *sep1, const char *sep2, int quote);
 size_t escapedStrlen(const char *restrict src, const char *sep1, const char 
*sep2, int quote);
 ssize_t fltFromStr(const char *src, size_t *len, flt **dst, bool external);
@@ -556,7 +556,7 @@ gdk_return log_bat_group_start(logger *l
 gdk_return log_bat_persists(logger *lg, BAT *b, log_id id);
 gdk_return log_bat_transient(logger *lg, log_id id);
 lng log_changes(logger *lg);
-gdk_return log_constant(logger *lg, int type, ptr val, log_id id, lng offset, 
lng cnt);
+gdk_return log_constant(logger *lg, int type, const void *val, log_id id, lng 
offset, lng cnt);
 logger *log_create(int debug, const char *fn, const char *logdir, int version, 
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *funcdata);
 gdk_return log_delta(logger *lg, BAT *uid, BAT *uval, log_id id);
 void log_destroy(logger *lg);
diff --git a/common/utils/mutils.c b/common/utils/mutils.c
--- a/common/utils/mutils.c
+++ b/common/utils/mutils.c
@@ -458,13 +458,6 @@ MT_lockf(const char *filename, int mode)
        if ((wfilename = utf8towchar(filename)) == NULL)
                return -2;
        ov = (OVERLAPPED) {0};
-#if defined(DUMMYSTRUCTNAME) && (defined(NONAMELESSUNION) || 
!defined(_MSC_EXTENSIONS))        /* Windows SDK v7.0 */
-       ov.u.s.Offset = 4;
-       ov.u.s.OffsetHigh = 0;
-#else
-       ov.Offset = 4;
-       ov.OffsetHigh = 0;
-#endif
 
        if (mode == F_ULOCK) {
                EnterCriticalSection(&cs);
@@ -476,7 +469,7 @@ MT_lockf(const char *filename, int mode)
                                fd = fp->fildes;
                                fh = (HANDLE) _get_osfhandle(fd);
                                free(fp);
-                               ret = UnlockFileEx(fh, 0, 1, 0, &ov);
+                               ret = UnlockFileEx(fh, 0, 10, 0, &ov);
                                free(wfilename);
                                return ret ? 0 : -1;
                        }
@@ -490,7 +483,7 @@ MT_lockf(const char *filename, int mode)
                free(wfilename);
                if (fh == INVALID_HANDLE_VALUE)
                        return -2;
-               ret = UnlockFileEx(fh, 0, 1, 0, &ov);
+               ret = UnlockFileEx(fh, 0, 10, 0, &ov);
                CloseHandle(fh);
                return 0;
        }
@@ -507,13 +500,13 @@ MT_lockf(const char *filename, int mode)
        }
 
        if (mode == F_TLOCK) {
-               ret = LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY | 
LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, &ov);
+               ret = LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY | 
LOCKFILE_EXCLUSIVE_LOCK, 0, 10, 0, &ov);
        } else if (mode == F_LOCK) {
-               ret = LockFileEx(fh, LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, &ov);
+               ret = LockFileEx(fh, LOCKFILE_EXCLUSIVE_LOCK, 0, 10, 0, &ov);
        } else if (mode == F_TEST) {
-               ret = LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY | 
LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, &ov);
+               ret = LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY | 
LOCKFILE_EXCLUSIVE_LOCK, 0, 10, 0, &ov);
                if (ret != 0) {
-                       UnlockFileEx(fh, 0, 1, 0, &ov);
+                       UnlockFileEx(fh, 0, 10, 0, &ov);
                        close(fd);
                        free(wfilename);
                        return 0;
@@ -772,11 +765,11 @@ MT_lockf(const char *filename, int mode)
                                free(fp->filename);
                                fd = fp->fd;
                                free(fp);
-                               seek = lseek(fd, 4, SEEK_SET);
+                               seek = lseek(fd, 0, SEEK_SET);
                                if (seek < 0)
                                        seek = 0;       /* should never happen, 
just for coverity */
-                               int ret = lockf(fd, mode, 1);
-                               (void) lseek(fd, seek, SEEK_SET); /* move seek 
pointer back */
+                               int ret = lockf(fd, mode, 0);
+                               (void) lseek(fd, seek, 0); /* move seek pointer 
back */
                                /* do not close fd, it is closed by caller */
                                return ret;             /* 0 if unlock 
successful, -1 if not */
                        }
@@ -788,8 +781,8 @@ MT_lockf(const char *filename, int mode)
        if (fd < 0)
                return -2;
 
-       if ((seek = lseek(fd, 4, SEEK_SET)) >= 0 &&
-           lockf(fd, mode, 1) == 0) {
+       if ((seek = lseek(fd, 0, SEEK_SET)) >= 0 &&
+           lockf(fd, mode, 0) == 0) {
                if (mode == F_ULOCK || mode == F_TEST) {
                        close(fd);
                        return 0;
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -479,12 +479,12 @@ typedef union {
 #else
        lng l[2];               /* force alignment, not otherwise used */
 #endif
-       uint8_t u[UUID_SIZE];
+       uint8_t u[UUID_SIZE] __attribute__((__nonstring__));
 } uuid;
 
 typedef struct {
        size_t nitems;
-       char data[] __attribute__((__nonstring__));
+       uint8_t data[] __attribute__((__nonstring__));
 } blob;
 gdk_export size_t blobsize(size_t nitems) __attribute__((__const__));
 
@@ -653,9 +653,12 @@ typedef struct {
 gdk_export void *VALconvert(int typ, ValPtr t);
 gdk_export char *VALformat(const ValRecord *res)
        __attribute__((__warn_unused_result__));
-gdk_export ValPtr VALcopy(ValPtr dst, const ValRecord *src);
-gdk_export ValPtr VALinit(ValPtr d, int tpe, const void *s);
-gdk_export void VALempty(ValPtr v);
+gdk_export ValPtr VALcopy(ValPtr dst, const ValRecord *src)
+       __attribute__((__access__(write_only, 1)));
+gdk_export ValPtr VALinit(ValPtr d, int tpe, const void *s)
+       __attribute__((__access__(write_only, 1)));
+gdk_export void VALempty(ValPtr v)
+       __attribute__((__access__(write_only, 1)));
 gdk_export void VALclear(ValPtr v);
 gdk_export ValPtr VALset(ValPtr v, int t, void *p);
 gdk_export void *VALget(ValPtr v);
@@ -1446,6 +1449,9 @@ gdk_export gdk_return BATclear(BAT *b, b
 gdk_export BAT *COLcopy(BAT *b, int tt, bool writable, role_t role);
 
 gdk_export gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT 
*b, BAT *s, BAT *g, BAT *e, BAT *h)
+       __attribute__((__access__(write_only, 1)))
+       __attribute__((__access__(write_only, 2)))
+       __attribute__((__access__(write_only, 3)))
        __attribute__((__warn_unused_result__));
 /*
  * @- BAT Input/Output
@@ -1525,6 +1531,9 @@ gdk_export gdk_return BATprint(stream *s
 gdk_export bool BATordered(BAT *b);
 gdk_export bool BATordered_rev(BAT *b);
 gdk_export gdk_return BATsort(BAT **sorted, BAT **order, BAT **groups, BAT *b, 
BAT *o, BAT *g, bool reverse, bool nilslast, bool stable)
+       __attribute__((__access__(write_only, 1)))
+       __attribute__((__access__(write_only, 2)))
+       __attribute__((__access__(write_only, 3)))
        __attribute__((__warn_unused_result__));
 
 
@@ -1731,7 +1740,8 @@ gdk_export void GDKclrerr(void);
  * allocated in the theap (tvheap for variable-sized types is still
  * extended if needed, making that these functions can fail).
  */
-static inline gdk_return __attribute__((__warn_unused_result__))
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to