Changeset: 17bfd8e4327d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/17bfd8e4327d
Modified Files:
clients/Tests/exports.stable.out
common/utils/mstring.h
gdk/gdk.h
gdk/gdk_system.h
gdk/gdk_utils.h
monetdb5/mal/mal_embedded.c
monetdb5/mal/mal_exception.h
monetdb5/mal/mal_function.c
monetdb5/mal/mal_import.c
monetdb5/mal/mal_instruction.c
monetdb5/mal/mal_instruction.h
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_namespace.c
monetdb5/mal/mal_namespace.h
monetdb5/mal/mal_parser.c
monetdb5/mal/mal_profiler.c
monetdb5/mal/mal_session.c
monetdb5/modules/atoms/json.c
monetdb5/modules/mal/mal_mapi.c
monetdb5/modules/mal/mdb.c
monetdb5/modules/mal/remote.c
monetdb5/optimizer/opt_generator.c
tools/monetdbe/monetdbe.c
Branch: default
Log Message:
Cleanup.
- Use attribute malloc with argument specifying matching free function
(only newer gcc).
- If two getVarNameIntoBuffer calls as function args, use different
buffers.
- Create variable mainRef.
- Remove some unnecessary initializations.
diffs (truncated from 557 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
@@ -282,7 +282,7 @@ bool GDKexiting(void);
jmp_buf GDKfataljump;
bit GDKfataljumpenable;
str GDKfatalmsg;
-gdk_return GDKfilepath(char *buf, size_t bufsize, int farmid, const char *dir,
const char *nme, const char *ext) __attribute__((__access__(write_only, 1)));
+gdk_return GDKfilepath(char *buf, size_t bufsize, int farmid, const char *dir,
const char *nme, const char *ext) __attribute__((__access__(write_only, 1, 2)));
void GDKfree(void *blk);
char *GDKgetbuf(void);
unsigned GDKgetdebug(void);
@@ -301,7 +301,7 @@ MT_Lock *volatile GDKlocklist;
ATOMIC_FLAG GDKlocklistlock;
ATOMIC_TYPE GDKlocksleepcnt;
void GDKlockstatistics(int);
-void *GDKmalloc(size_t size) __attribute__((__malloc__))
__attribute__((__alloc_size__(1))) __attribute__((__warn_unused_result__));
+void *GDKmalloc(size_t size) __attribute__((__malloc__))
__attribute__((__malloc__(GDKfree, 1))) __attribute__((__alloc_size__(1)))
__attribute__((__warn_unused_result__));
size_t GDKmallocated(const void *s);
size_t GDKmem_cursize(void);
gdk_return GDKmergeidx(BAT *b, BAT **a, int n_ar);
@@ -324,9 +324,9 @@ stream *GDKstdout;
ssize_t GDKstrFromStr(unsigned char *restrict dst, const unsigned char
*restrict src, ssize_t len, char quote);
int GDKstrcasecmp(const char *s1, const char *s2);
char *GDKstrcasestr(const char *haystack, const char *needle);
-str GDKstrdup(const char *s) __attribute__((__malloc__))
__attribute__((__warn_unused_result__));
+str GDKstrdup(const char *s) __attribute__((__malloc__))
__attribute__((__malloc__(GDKfree, 1))) __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__));
+str GDKstrndup(const char *s, size_t n) __attribute__((__malloc__))
__attribute__((__malloc__(GDKfree, 1))) __attribute__((__warn_unused_result__));
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);
@@ -348,7 +348,7 @@ gdk_return GDKupgradevarheap(BAT *b, var
lng GDKusec(void);
const char *GDKversion(void) __attribute__((__const__));
size_t GDKvm_cursize(void);
-void *GDKzalloc(size_t size) __attribute__((__malloc__))
__attribute__((__alloc_size__(1))) __attribute__((__warn_unused_result__));
+void *GDKzalloc(size_t size) __attribute__((__malloc__))
__attribute__((__malloc__(GDKfree, 1))) __attribute__((__alloc_size__(1)))
__attribute__((__warn_unused_result__));
void HASHdestroy(BAT *b);
BUN HASHlist(Hash *h, BUN i);
BUN HASHprobe(const Hash *h, const void *v);
@@ -912,8 +912,8 @@ const char corrRef[];
const char countRef[];
const char count_no_nilRef[];
int cpyConstant(MalBlkPtr mb, VarPtr vr);
-str createException(enum malexception, const char *, _In_z_
_Printf_format_string_ const char *, ...) __attribute__((__format__(__printf__,
3, 4))) __attribute__((__returns_nonnull__));
-str createMalException(MalBlkPtr, int, enum malexception, _In_z_
_Printf_format_string_ const char *, ...) __attribute__((__format__(__printf__,
4, 5))) __attribute__((__returns_nonnull__));
+str createException(enum malexception, const char *, _In_z_
_Printf_format_string_ const char *, ...) __attribute__((__malloc__))
__attribute__((__malloc__(freeException, 1)))
__attribute__((__format__(__printf__, 3, 4)))
__attribute__((__returns_nonnull__));
+str createMalException(MalBlkPtr, int, enum malexception, _In_z_
_Printf_format_string_ const char *, ...) __attribute__((__malloc__))
__attribute__((__malloc__(freeException, 1)))
__attribute__((__format__(__printf__, 4, 5)))
__attribute__((__returns_nonnull__));
const char create_functionRef[];
const char create_roleRef[];
const char create_schemaRef[];
@@ -1026,7 +1026,7 @@ int getStrConstant(MalBlkPtr mb, str val
const char getTraceRef[];
str getTypeIdentifier(malType tpe);
str getTypeName(malType tpe);
-char *getVarNameIntoBuffer(MalBlkPtr mb, int idx, char *buf);
+char *getVarNameIntoBuffer(MalBlkPtr mb, int idx, char *buf)
__attribute__((__access__(write_only, 3)));
const char getVariableRef[];
Module globalModule(const char *nme);
const char grantRef[];
@@ -1069,6 +1069,7 @@ str loadLibrary(const char *modulename,
char *locate_file(const char *basename, const char *ext, bit recurse);
const char lockRef[];
const char lookupRef[];
+const char mainRef[];
str mal2str(MalBlkPtr mb, int first, int last);
int malAtomSize(int size, const char *name);
str malBootstrap(char *modules[], bool embedded, const char *initpasswd);
diff --git a/common/utils/mstring.h b/common/utils/mstring.h
--- a/common/utils/mstring.h
+++ b/common/utils/mstring.h
@@ -23,9 +23,17 @@
#define GCC_Pragma(pragma)
#endif
+#if defined(__has_attribute)
+#if ! __has_attribute(access)
+#define __access__(...)
+#endif
+#else
+#define __access__(...)
+#endif
+
/* copy at most (n-1) bytes from src to dst and add a terminating NULL
* byte; return length of src (i.e. can be more than what is copied) */
-static inline size_t
+static inline size_t __attribute__((__access__(write_only, 1, 3)))
strcpy_len(char *restrict dst, const char *restrict src, size_t n)
{
if (dst != NULL && n != 0) {
@@ -63,7 +71,7 @@ GCC_Pragma("GCC diagnostic pop")
/* copy the NULL terminated list of src strings with a maximum of n
* bytes to dst; return the combined length of the src strings */
-static inline size_t
+static inline size_t __attribute__((__access__(write_only, 1, 2)))
strconcat_len(char *restrict dst, size_t n, const char *restrict src, ...)
{
va_list ap;
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1487,7 +1487,7 @@ gdk_export gdk_return BATsave(BAT *b)
#define MAXPATH 1024 /* maximum supported file path */
gdk_export gdk_return GDKfilepath(char *buf, size_t bufsize, int farmid, const
char *dir, const char *nme, const char *ext)
- __attribute__((__access__(write_only, 1)));
+ __attribute__((__access__(write_only, 1, 2)));
gdk_export bool GDKinmemory(int farmid);
gdk_export bool GDKembedded(void);
gdk_export gdk_return GDKcreatedir(const char *nme);
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -64,8 +64,12 @@
#if !__has_attribute(__format__)
#define __format__(...)
#endif
+/* attribute malloc with argument seems to have been introduced in gcc 13 */
#if !__has_attribute(__malloc__)
#define __malloc__
+#define __malloc__(...)
+#elif !defined(__GNUC__) || __GNUC__ < 13
+#define __malloc__(...)
#endif
#if !__has_attribute(__nonnull__)
#define __nonnull__(...)
diff --git a/gdk/gdk_utils.h b/gdk/gdk_utils.h
--- a/gdk/gdk_utils.h
+++ b/gdk/gdk_utils.h
@@ -87,23 +87,27 @@ gdk_export gdk_return GDKmunmap(void *ad
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 GDKfree(void *blk);
gdk_export void *GDKmalloc(size_t size)
__attribute__((__malloc__))
+ __attribute__((__malloc__(GDKfree, 1)))
__attribute__((__alloc_size__(1)))
__attribute__((__warn_unused_result__));
gdk_export void *GDKzalloc(size_t size)
__attribute__((__malloc__))
+ __attribute__((__malloc__(GDKfree, 1)))
__attribute__((__alloc_size__(1)))
__attribute__((__warn_unused_result__));
gdk_export void *GDKrealloc(void *pold, size_t size)
__attribute__((__alloc_size__(2)))
__attribute__((__warn_unused_result__));
-gdk_export void GDKfree(void *blk);
gdk_export str GDKstrdup(const char *s)
__attribute__((__malloc__))
+ __attribute__((__malloc__(GDKfree, 1)))
__attribute__((__warn_unused_result__));
gdk_export str GDKstrndup(const char *s, size_t n)
__attribute__((__malloc__))
+ __attribute__((__malloc__(GDKfree, 1)))
__attribute__((__warn_unused_result__));
gdk_export size_t GDKmallocated(const void *s);
diff --git a/monetdb5/mal/mal_embedded.c b/monetdb5/mal/mal_embedded.c
--- a/monetdb5/mal/mal_embedded.c
+++ b/monetdb5/mal/mal_embedded.c
@@ -117,7 +117,7 @@ malEmbeddedBoot(int workerlimit, int mem
MT_thread_set_qry_ctx(qc_old);
return msg;
}
- if ((msg = MSinitClientPrg(c, userRef, "main")) != MAL_SUCCEED) {
+ if ((msg = MSinitClientPrg(c, userRef, mainRef)) != MAL_SUCCEED) {
MCcloseClient(c);
MT_thread_set_qry_ctx(qc_old);
return msg;
diff --git a/monetdb5/mal/mal_exception.h b/monetdb5/mal/mal_exception.h
--- a/monetdb5/mal/mal_exception.h
+++ b/monetdb5/mal/mal_exception.h
@@ -45,26 +45,30 @@ enum malexception {
#define __returns_nonnull__
#endif
+mal_export void freeException(str);
mal_export str createException(enum malexception, const char *,
_In_z_
_Printf_format_string_ const char *, ...)
- __attribute__((__format__(__printf__, 3, 4)))
- __attribute__((__returns_nonnull__));
+ __attribute__((__malloc__))
+ __attribute__((__malloc__(freeException, 1)))
+ __attribute__((__format__(__printf__, 3, 4)))
+ __attribute__((__returns_nonnull__));
/*FIXmal_export str createMalException(MalBlkPtr mb, int pc, enum malexception
type, const char *prev, const char *format, ...);*/
mal_export str createMalException(MalBlkPtr, int, enum malexception,
_In_z_
_Printf_format_string_ const char *,
...)
- __attribute__((__format__(__printf__, 4, 5)))
- __attribute__((__returns_nonnull__));
+ __attribute__((__malloc__))
+ __attribute__((__malloc__(freeException, 1)))
+ __attribute__((__format__(__printf__, 4, 5)))
+ __attribute__((__returns_nonnull__));
mal_export char *concatErrors(char *err1, const char *err2)
- __attribute__((__nonnull__(1, 2)))
- __attribute__((__returns_nonnull__));
+ __attribute__((__nonnull__(1, 2)))
+ __attribute__((__returns_nonnull__));
mal_export bool isExceptionVariable(const char *nme);
mal_export enum malexception getExceptionType(const char *);
mal_export str getExceptionPlace(const char *);
mal_export str getExceptionMessageAndState(const char *);
mal_export str getExceptionMessage(const char *);
-mal_export void freeException(str);
#include "mal_errors.h"
#endif /* _MAL_EXCEPTION_H */
diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c
--- a/monetdb5/mal/mal_function.c
+++ b/monetdb5/mal/mal_function.c
@@ -96,7 +96,7 @@ chkFlow(MalBlkPtr mb)
int endseen = 0, retseen = 0;
InstrPtr p, sig;
str msg = MAL_SUCCEED;
- char name[IDLENGTH] = { 0 };
+ char name[IDLENGTH];
if (mb->errors != MAL_SUCCEED)
return mb->errors;
@@ -127,11 +127,13 @@ chkFlow(MalBlkPtr mb)
break;
case EXITsymbol:
v = getDestVar(p);
- if (btop > 0 && var[btop - 1] != v)
+ if (btop > 0 && var[btop - 1] != v) {
+ char name2[IDLENGTH];
throw(MAL, "chkFlow",
"%s.%s exit-label '%s' does not match
'%s'",
getModuleId(sig), getFunctionId(sig),
getVarNameIntoBuffer(mb, v, name),
- getVarNameIntoBuffer(mb, var[btop -
1], name));
+ getVarNameIntoBuffer(mb, var[btop -
1], name2));
+ }
if (btop == 0)
throw(MAL, "chkFlow",
"%s.%s exit-label '%s' without
begin-label",
@@ -165,9 +167,9 @@ chkFlow(MalBlkPtr mb)
if (var[j] == v)
break;
if (j < 0) {
- str nme = getVarNameIntoBuffer(mb, v, name);
throw(MAL, "chkFlow", "%s.%s label '%s' not in
guarded block",
- getModuleId(sig), getFunctionId(sig),
nme);
+ getModuleId(sig), getFunctionId(sig),
+ getVarNameIntoBuffer(mb, v, name));
}
break;
case RETURNsymbol: {
@@ -694,7 +696,7 @@ chkDeclarations(MalBlkPtr mb)
short blks[MAXDEPTH], top = 0, blkId = 1;
int dflow = -1;
str msg = MAL_SUCCEED;
- char name[IDLENGTH] = { 0 };
+ char name[IDLENGTH];
if (mb->errors)
return GDKstrdup(mb->errors);
diff --git a/monetdb5/mal/mal_import.c b/monetdb5/mal/mal_import.c
--- a/monetdb5/mal/mal_import.c
+++ b/monetdb5/mal/mal_import.c
@@ -348,7 +348,7 @@ compileString(Symbol *fcn, Client cntxt,
return msg;
}
- msg = MSinitClientPrg(c, userRef, "main"); /* create new context */
+ msg = MSinitClientPrg(c, userRef, mainRef); /* create new context */
if (msg == MAL_SUCCEED)
msg = MALparser(c);
/*
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -587,12 +587,11 @@ char *
getVarNameIntoBuffer(MalBlkPtr mb, int idx, char *buf)
{
char *s = mb->var[idx].name;
- if (getVarKind(mb, idx) == 0)
- setVarKind(mb, idx, REFMARKER);
if (s == NULL) {
- (void) snprintf(buf, IDLENGTH, "%c_%d", getVarKind(mb, idx),
idx);
+ char kind = getVarKind(mb, idx);
+ (void) snprintf(buf, IDLENGTH, "%c_%d", kind ? kind :
REFMARKER, idx);
} else {
- (void) snprintf(buf, IDLENGTH, "%s", s);
+ strcpy_len(buf, s, IDLENGTH);
}
return buf;
}
diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h
--- a/monetdb5/mal/mal_instruction.h
+++ b/monetdb5/mal/mal_instruction.h
@@ -58,10 +58,9 @@ setFunctionId(InstrPtr p, const char *s)
#endif
#define garbageControl(P) ((P)->gc)
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]