Changeset: e9f095b568e7 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e9f095b568e7 Modified Files: clients/Tests/exports.stable.out gdk/gdk.h gdk/gdk_posix.h gdk/gdk_private.h monetdb5/mal/mal_private.h sql/storage/bat/bat_table.c sql/storage/restrict/restrict_table.c sql/storage/sql_storage.h Branch: Jan2014 Log Message:
Add function attributes to help compiler and analysis. The attributes we added are __alloc_size__ to specify that the return value is new memory whose size is given by the indicated parameter; __visibility__("hidden") to specify that the function is not called from outside the share object; __sentinel__ to indicate that a list of arguments to a varargs function must end with a sentinel (NULL pointer). diffs (truncated from 450 to 300 lines): 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 @@ -277,14 +277,14 @@ MT_Lock *volatile GDKlocklist; ATOMIC_FLAG volatile GDKlocklistlock; ATOMIC_TYPE volatile GDKlocksleepcnt; void GDKlockstatistics(int); -void *GDKmalloc(size_t size); +void *GDKmalloc(size_t size) __attribute__((__alloc_size__(1))); size_t GDKmem_cursize(void); -void *GDKmmap(const char *path, int mode, size_t len); +void *GDKmmap(const char *path, int mode, size_t len) __attribute__((__alloc_size__(3))); int GDKms(void); int GDKnr_threads; void GDKqsort(void *h, void *t, const void *base, size_t n, int hs, int ts, int tpe); void GDKqsort_rev(void *h, void *t, const void *base, size_t n, int hs, int ts, int tpe); -void *GDKrealloc(void *pold, size_t size); +void *GDKrealloc(void *pold, size_t size) __attribute__((__alloc_size__(2))); void GDKsetenv(str name, str value); ssize_t GDKstrFromStr(unsigned char *dst, const unsigned char *src, ssize_t len); str GDKstrdup(const char *s); @@ -295,7 +295,7 @@ lng GDKusec(void); BAT *GDKval; const char *GDKversion(void); size_t GDKvm_cursize(void); -void *GDKzalloc(size_t size); +void *GDKzalloc(size_t size) __attribute__((__alloc_size__(1))); void HASHdestroy(BAT *b); BUN HASHlist(Hash *h, BUN i); BUN HASHprobe(Hash *h, const void *v); @@ -327,7 +327,7 @@ void MT_locktrace_end(void); char *MT_locktrace_nme[65536]; void MT_locktrace_start(void); struct Mallinfo MT_mallinfo(void); -void *MT_mmap(const char *path, int mode, size_t len); +void *MT_mmap(const char *path, int mode, size_t len) __attribute__((__alloc_size__(3))); int MT_munmap(void *p, size_t len); int MT_path_absolute(const char *path); void MT_sleep_ms(unsigned int ms); diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -2262,7 +2262,8 @@ gdk_export BAT *BATimprints(BAT *b); #define GDK_HISTO_MAX_BIT ((int) (sizeof(size_t)<<3)) /* we prefer to use vm_alloc routines on size > GDKmmap */ -gdk_export void *GDKmmap(const char *path, int mode, size_t len); +gdk_export void *GDKmmap(const char *path, int mode, size_t len) + __attribute__((__alloc_size__(3))); gdk_export size_t GDK_mem_maxsize; /* max allowed size of committed memory */ gdk_export size_t GDK_vm_maxsize; /* max allowed size of reserved vm */ @@ -2271,9 +2272,12 @@ gdk_export int GDK_vm_trim; /* allow tr gdk_export size_t GDKmem_cursize(void); /* RAM/swapmem that MonetDB has claimed from OS */ gdk_export size_t GDKvm_cursize(void); /* current MonetDB VM address space usage */ -gdk_export void *GDKmalloc(size_t size); -gdk_export void *GDKzalloc(size_t size); -gdk_export void *GDKrealloc(void *pold, size_t size); +gdk_export void *GDKmalloc(size_t size) + __attribute__((__alloc_size__(1))); +gdk_export void *GDKzalloc(size_t size) + __attribute__((__alloc_size__(1))); +gdk_export void *GDKrealloc(void *pold, size_t size) + __attribute__((__alloc_size__(2))); gdk_export void GDKfree(void *blk); gdk_export str GDKstrdup(const char *s); diff --git a/gdk/gdk_posix.h b/gdk/gdk_posix.h --- a/gdk/gdk_posix.h +++ b/gdk/gdk_posix.h @@ -189,7 +189,8 @@ gdk_export void MT_sleep_ms(unsigned int gdk_export size_t MT_getrss(void); -gdk_export void *MT_mmap(const char *path, int mode, size_t len); +gdk_export void *MT_mmap(const char *path, int mode, size_t len) + __attribute__((__alloc_size__(3))); gdk_export int MT_munmap(void *p, size_t len); gdk_export int MT_path_absolute(const char *path); diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h --- a/gdk/gdk_private.h +++ b/gdk/gdk_private.h @@ -23,81 +23,152 @@ #error this file should not be included outside its source directory #endif -int ALIGNcommit(BAT *b); -int ALIGNundo(BAT *b); -int ATOMheap(int id, Heap *hp, size_t cap); -int ATOMisdescendant(int id, int parentid); -int ATOMunknown_add(const char *nme); -int ATOMunknown_del(int a); -int ATOMunknown_find(const char *nme); -str ATOMunknown_name(int a); -int BATcheckmodes(BAT *b, int persistent); -BAT *BATclone(BAT *b, BUN capacity); -BATstore *BATcreatedesc(int ht, int tt, int heapnames); -void BATdestroy(BATstore *bs); -int BATfree(BAT *b); -gdk_return BATgroup_internal(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *g, BAT *e, BAT *h, int subsorted); -BUN BATguess(BAT *b); -void BATinit_idents(BAT *bn); -BAT *BATload_intern(bat bid, int lock); -BAT *BATmaterializet(BAT *b); -void BATpropagate(BAT *dst, BAT *src, int idx); -str BATrename(BAT *b, const char *nme); -void BATsetdims(BAT *b); -size_t BATvmsize(BAT *b, int dirty); -void BBPcacheit(BATstore *bs, int lock); +int ALIGNcommit(BAT *b) + __attribute__((__visibility__("hidden"))); +int ALIGNundo(BAT *b) + __attribute__((__visibility__("hidden"))); +int ATOMheap(int id, Heap *hp, size_t cap) + __attribute__((__visibility__("hidden"))); +int ATOMisdescendant(int id, int parentid) + __attribute__((__visibility__("hidden"))); +int ATOMunknown_add(const char *nme) + __attribute__((__visibility__("hidden"))); +int ATOMunknown_del(int a) + __attribute__((__visibility__("hidden"))); +int ATOMunknown_find(const char *nme) + __attribute__((__visibility__("hidden"))); +str ATOMunknown_name(int a) + __attribute__((__visibility__("hidden"))); +int BATcheckmodes(BAT *b, int persistent) + __attribute__((__visibility__("hidden"))); +BAT *BATclone(BAT *b, BUN capacity) + __attribute__((__visibility__("hidden"))); +BATstore *BATcreatedesc(int ht, int tt, int heapnames) + __attribute__((__visibility__("hidden"))); +void BATdestroy(BATstore *bs) + __attribute__((__visibility__("hidden"))); +int BATfree(BAT *b) + __attribute__((__visibility__("hidden"))); +gdk_return BATgroup_internal(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *g, BAT *e, BAT *h, int subsorted) + __attribute__((__visibility__("hidden"))); +BUN BATguess(BAT *b) + __attribute__((__visibility__("hidden"))); +void BATinit_idents(BAT *bn) + __attribute__((__visibility__("hidden"))); +BAT *BATload_intern(bat bid, int lock) + __attribute__((__visibility__("hidden"))); +BAT *BATmaterializet(BAT *b) + __attribute__((__visibility__("hidden"))); +void BATpropagate(BAT *dst, BAT *src, int idx) + __attribute__((__visibility__("hidden"))); +str BATrename(BAT *b, const char *nme) + __attribute__((__visibility__("hidden"))); +void BATsetdims(BAT *b) + __attribute__((__visibility__("hidden"))); +size_t BATvmsize(BAT *b, int dirty) + __attribute__((__visibility__("hidden"))); +void BBPcacheit(BATstore *bs, int lock) + __attribute__((__visibility__("hidden"))); void BBPdump(void); /* never called: for debugging only */ -void BBPexit(void); -void BBPinit(void); -bat BBPinsert(BATstore *bs); -void BBPtrim(size_t delta); -void BBPunshare(bat b); -void GDKclrerr(void); -int GDKextend(const char *fn, size_t size); -int GDKextendf(int fd, size_t size); -int GDKfdlocate(const char *nme, const char *mode, const char *ext); -FILE *GDKfilelocate(const char *nme, const char *mode, const char *ext); -char *GDKload(const char *nme, const char *ext, size_t size, size_t *maxsize, storage_t mode); +void BBPexit(void) + __attribute__((__visibility__("hidden"))); +void BBPinit(void) + __attribute__((__visibility__("hidden"))); +bat BBPinsert(BATstore *bs) + __attribute__((__visibility__("hidden"))); +void BBPtrim(size_t delta) + __attribute__((__visibility__("hidden"))); +void BBPunshare(bat b) + __attribute__((__visibility__("hidden"))); +void GDKclrerr(void) + __attribute__((__visibility__("hidden"))); +int GDKextend(const char *fn, size_t size) + __attribute__((__visibility__("hidden"))); +int GDKextendf(int fd, size_t size) + __attribute__((__visibility__("hidden"))); +int GDKfdlocate(const char *nme, const char *mode, const char *ext) + __attribute__((__visibility__("hidden"))); +FILE *GDKfilelocate(const char *nme, const char *mode, const char *ext) + __attribute__((__visibility__("hidden"))); +char *GDKload(const char *nme, const char *ext, size_t size, size_t *maxsize, storage_t mode) + __attribute__((__visibility__("hidden"))); void GDKlog(_In_z_ _Printf_format_string_ const char *format, ...) - __attribute__((__format__(__printf__, 1, 2))); -void *GDKmallocmax(size_t size, size_t *maxsize, int emergency); -int GDKmove(const char *dir1, const char *nme1, const char *ext1, const char *dir2, const char *nme2, const char *ext2); -int GDKmunmap(void *addr, size_t len); -void *GDKreallocmax(void *pold, size_t size, size_t *maxsize, int emergency); -int GDKremovedir(const char *nme); -int GDKsave(const char *nme, const char *ext, void *buf, size_t size, storage_t mode); -int GDKssort_rev(void *h, void *t, const void *base, size_t n, int hs, int ts, int tpe); -int GDKssort(void *h, void *t, const void *base, size_t n, int hs, int ts, int tpe); -int GDKunlink(const char *dir, const char *nme, const char *extension); -int HASHgonebad(BAT *b, const void *v); -BUN HASHmask(BUN cnt); -Hash *HASHnew(Heap *hp, int tpe, BUN size, BUN mask); -void HASHremove(BAT *b); -int HEAPalloc(Heap *h, size_t nitems, size_t itemsize); -int HEAPdelete(Heap *h, const char *o, const char *ext); -int HEAPload(Heap *h, const char *nme, const char *ext, int trunc); -int HEAPsave(Heap *h, const char *nme, const char *ext); -int HEAPshrink(Heap *h, size_t size); -int HEAPwarm(Heap *h); -oid MAXoid(BAT *i); + __attribute__((__format__(__printf__, 1, 2))) + __attribute__((__visibility__("hidden"))); +void *GDKmallocmax(size_t size, size_t *maxsize, int emergency) + __attribute__((__visibility__("hidden"))); +int GDKmove(const char *dir1, const char *nme1, const char *ext1, const char *dir2, const char *nme2, const char *ext2) + __attribute__((__visibility__("hidden"))); +int GDKmunmap(void *addr, size_t len) + __attribute__((__visibility__("hidden"))); +void *GDKreallocmax(void *pold, size_t size, size_t *maxsize, int emergency) + __attribute__((__visibility__("hidden"))); +int GDKremovedir(const char *nme) + __attribute__((__visibility__("hidden"))); +int GDKsave(const char *nme, const char *ext, void *buf, size_t size, storage_t mode) + __attribute__((__visibility__("hidden"))); +int GDKssort_rev(void *h, void *t, const void *base, size_t n, int hs, int ts, int tpe) + __attribute__((__visibility__("hidden"))); +int GDKssort(void *h, void *t, const void *base, size_t n, int hs, int ts, int tpe) + __attribute__((__visibility__("hidden"))); +int GDKunlink(const char *dir, const char *nme, const char *extension) + __attribute__((__visibility__("hidden"))); +int HASHgonebad(BAT *b, const void *v) + __attribute__((__visibility__("hidden"))); +BUN HASHmask(BUN cnt) + __attribute__((__visibility__("hidden"))); +Hash *HASHnew(Heap *hp, int tpe, BUN size, BUN mask) + __attribute__((__visibility__("hidden"))); +void HASHremove(BAT *b) + __attribute__((__visibility__("hidden"))); +int HEAPalloc(Heap *h, size_t nitems, size_t itemsize) + __attribute__((__visibility__("hidden"))); +int HEAPdelete(Heap *h, const char *o, const char *ext) + __attribute__((__visibility__("hidden"))); +int HEAPload(Heap *h, const char *nme, const char *ext, int trunc) + __attribute__((__visibility__("hidden"))); +int HEAPsave(Heap *h, const char *nme, const char *ext) + __attribute__((__visibility__("hidden"))); +int HEAPshrink(Heap *h, size_t size) + __attribute__((__visibility__("hidden"))); +int HEAPwarm(Heap *h) + __attribute__((__visibility__("hidden"))); +oid MAXoid(BAT *i) + __attribute__((__visibility__("hidden"))); void MT_global_exit(int status) - __attribute__((__noreturn__)); -void MT_init_posix(void); -void *MT_mremap(const char *path, int mode, void *old_address, size_t old_size, size_t *new_size); -int MT_msync(void *p, size_t len, int mode); -int OIDdirty(void); -int OIDinit(void); -oid OIDread(str buf); -int OIDwrite(stream *fp); -void strCleanHash(Heap *hp, int rebuild); -int strCmpNoNil(const unsigned char *l, const unsigned char *r); -int strElimDoubles(Heap *h); -var_t strLocate(Heap *h, const char *v); -void VIEWdestroy(BAT *b); -BAT *VIEWreset(BAT *b); -int IMPSgetbin(int tpe, bte bits, char *bins, const void *v); + __attribute__((__noreturn__)) + __attribute__((__visibility__("hidden"))); +void MT_init_posix(void) + __attribute__((__visibility__("hidden"))); +void *MT_mremap(const char *path, int mode, void *old_address, size_t old_size, size_t *new_size) + __attribute__((__visibility__("hidden"))); +int MT_msync(void *p, size_t len, int mode) + __attribute__((__visibility__("hidden"))); +int OIDdirty(void) + __attribute__((__visibility__("hidden"))); +int OIDinit(void) + __attribute__((__visibility__("hidden"))); +oid OIDread(str buf) + __attribute__((__visibility__("hidden"))); +int OIDwrite(stream *fp) + __attribute__((__visibility__("hidden"))); +void strCleanHash(Heap *hp, int rebuild) + __attribute__((__visibility__("hidden"))); +int strCmpNoNil(const unsigned char *l, const unsigned char *r) + __attribute__((__visibility__("hidden"))); +int strElimDoubles(Heap *h) + __attribute__((__visibility__("hidden"))); +var_t strLocate(Heap *h, const char *v) + __attribute__((__visibility__("hidden"))); +void VIEWdestroy(BAT *b) + __attribute__((__visibility__("hidden"))); +BAT *VIEWreset(BAT *b) + __attribute__((__visibility__("hidden"))); +int IMPSgetbin(int tpe, bte bits, char *bins, const void *v) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list