From e593563fe49cec16079fa1b32e69121b5e344a95 Mon Sep 17 00:00:00 2001 From: Kostyantyn Vorobyov <kostyantyn.vorobyov@cea.fr> Date: Thu, 7 Jan 2016 14:35:28 +0100 Subject: [PATCH] Added format-based assertions Replaced system-wide assertions with custom assertions using embedded printf library --- .../e-acsl/share/e-acsl/e_acsl_printf.h | 33 ++++++++++++++++--- .../share/e-acsl/memory_model/e_acsl_mmodel.c | 1 - 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/plugins/e-acsl/share/e-acsl/e_acsl_printf.h b/src/plugins/e-acsl/share/e-acsl/e_acsl_printf.h index 8eafd66f8c0..d51f2524de3 100644 --- a/src/plugins/e-acsl/share/e-acsl/e_acsl_printf.h +++ b/src/plugins/e-acsl/share/e-acsl/e_acsl_printf.h @@ -33,6 +33,12 @@ #include <stddef.h> #include <stdint.h> #include <unistd.h> +#include <limits.h> + +// For PATH_MAX in Linux +#ifdef __linux__ + #include <linux/limits.h> +#endif static void printf(char *fmt, ...); @@ -262,11 +268,6 @@ static void eprintf(char *fmt, ...) { } static void vabort(char *fmt, ...) { - char *mtstr = "E_ACSL ERROR:"; - char extfmt [strlen(mtstr) + strlen(fmt) + 1] ; - sprintf(extfmt,"%s%s",mtstr,fmt); - fmt = extfmt; - va_list va; va_start(va,fmt); _format(NULL,_charc_stderr,fmt,va); @@ -289,3 +290,25 @@ static void sprintf(char* s,char *fmt, ...) { putcp(&s,0); va_end(va); } + +#define assert(expr) \ + ((expr) ? (void)(0) : vabort("%s at %s:%d\n", \ + #expr, __FILE__,__LINE__)) + +static void vassert_fail(int expr, int line, char *file, char *fmt, ...) { + if (!expr) { + char *afmt = "%s at %s:%d\n"; + char buf [strlen(fmt) + strlen(afmt) + PATH_MAX + 11]; + sprintf(buf, afmt, fmt, file, line); + fmt = buf; + + va_list va; + va_start(va,fmt); + _format(NULL,_charc_stderr,fmt,va); + va_end(va); + abort(); + } +} + +#define vassert(expr, fmt, ...) \ + vassert_fail(expr, __LINE__, __FILE__, fmt, __VA_ARGS__) diff --git a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel.c b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel.c index 3075c22ff86..f6c6062282a 100644 --- a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel.c +++ b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel.c @@ -23,7 +23,6 @@ #include <stdlib.h> #include <string.h> #include <stdbool.h> -#include <assert.h> #include "e_acsl_mmodel_api.h" #include "e_acsl_mmodel.h" #include "../e_acsl_printf.h" -- GitLab