From 86a1707b75e97ab9c15a5f986b2220a66fd19230 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 21 Sep 2015 23:26:47 +0200 Subject: [PATCH 001/211] Added cmake option to turn on/off tests (off by default) --- .travis.yml | 1 + CMakeLists.txt | 3 +++ appveyor.yml | 1 + 3 files changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index d9a7c9aa..83c86474 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,6 +30,7 @@ script: - > cmake -Wno-dev + -DTESTS=ON -DCOVERALLS=${COVERAGE} -DCMAKE_BUILD_TYPE=${CONFIGURATION} -DCMAKE_INSTALL_PREFIX=criterion-${TRAVIS_TAG} diff --git a/CMakeLists.txt b/CMakeLists.txt index 73c04551..3ee09e3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,6 +50,7 @@ endif() # Setup coveralls +option(TESTS "Turn on the samples and test" OFF) option(COVERALLS "Turn on coveralls support" OFF) option(COVERALLS_UPLOAD "Upload the generated coveralls json" ON) @@ -192,6 +193,8 @@ add_custom_target(gcov -P "${CMAKE_MODULE_PATH}/Gcov.cmake" ) +if (TESTS) enable_testing() add_subdirectory(samples) add_subdirectory(test) +endif () diff --git a/appveyor.yml b/appveyor.yml index 46eb294b..869d5cad 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -38,6 +38,7 @@ install: - > cmake -Wno-dev + -DTESTS=ON -DCMAKE_INSTALL_PREFIX="criterion-%RELEASE_NAME%" -DCMAKE_BUILD_TYPE="%CONFIGURATION%" -G "%GENERATOR%" From d05d71bbd5f459f77fb1e1a47482d3fe0b8c2142 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 22 Sep 2015 00:16:45 +0200 Subject: [PATCH 002/211] Renamed TESTS cmake option to CTESTS --- .travis.yml | 2 +- CMakeLists.txt | 4 ++-- appveyor.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 83c86474..621b5a15 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ script: - > cmake -Wno-dev - -DTESTS=ON + -DCTESTS=ON -DCOVERALLS=${COVERAGE} -DCMAKE_BUILD_TYPE=${CONFIGURATION} -DCMAKE_INSTALL_PREFIX=criterion-${TRAVIS_TAG} diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ee09e3e..9bd4d044 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,7 +50,7 @@ endif() # Setup coveralls -option(TESTS "Turn on the samples and test" OFF) +option(CTESTS "Turn on the samples and test" OFF) option(COVERALLS "Turn on coveralls support" OFF) option(COVERALLS_UPLOAD "Upload the generated coveralls json" ON) @@ -193,7 +193,7 @@ add_custom_target(gcov -P "${CMAKE_MODULE_PATH}/Gcov.cmake" ) -if (TESTS) +if (CTESTS) enable_testing() add_subdirectory(samples) add_subdirectory(test) diff --git a/appveyor.yml b/appveyor.yml index 869d5cad..29952bb7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -38,7 +38,7 @@ install: - > cmake -Wno-dev - -DTESTS=ON + -DCTESTS=ON -DCMAKE_INSTALL_PREFIX="criterion-%RELEASE_NAME%" -DCMAKE_BUILD_TYPE="%CONFIGURATION%" -G "%GENERATOR%" From 984ecc5a74ff6e631105675095e89174b5c254ee Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 22 Sep 2015 01:12:32 +0200 Subject: [PATCH 003/211] Added missing include directory addition for libintl dependency --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9bd4d044..14068747 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -171,6 +171,7 @@ endif() if (LIBINTL_LIB_FOUND) target_link_libraries(criterion ${LIBINTL_LIBRARIES}) + include_directories(${LIBINTL_INCLUDE_DIR}) endif() if (COVERALLS) From 1c42bf8de0df2ff9362b4a58488c540eefcc3b1e Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 22 Sep 2015 01:46:56 +0200 Subject: [PATCH 004/211] Fixed signedness comparison warning on delete_arr --- include/criterion/alloc.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/include/criterion/alloc.h b/include/criterion/alloc.h index 8b80eadb..741b999d 100644 --- a/include/criterion/alloc.h +++ b/include/criterion/alloc.h @@ -88,9 +88,8 @@ namespace criterion { void delete_arr(T* ptr) { size_t len = *(reinterpret_cast<size_t*>(ptr)); T* arr = reinterpret_cast<T*>(reinterpret_cast<size_t*>(ptr) + 1); - for (int i = 0; i < len; ++i) { + for (size_t i = 0; i < len; ++i) arr[i].~T(); - } cr_free(ptr); } From 0de2797dee60088f9281fc29b168947d54ec9b80 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 22 Sep 2015 12:12:54 +0200 Subject: [PATCH 005/211] Renamed assume macros for consistency --- doc/theories.rst | 16 ++++++++-------- include/criterion/theories.h | 30 +++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/doc/theories.rst b/doc/theories.rst index f95bae0d..4f07d8aa 100644 --- a/doc/theories.rst +++ b/doc/theories.rst @@ -78,26 +78,26 @@ Macro Description ------------------------------------------------------- ---------------------------------------------------- ``cr_assume_float_neq(Actual, Unexpected, Epsilon)`` Assumes Actual != Expected with an error of Epsilon. ------------------------------------------------------- ---------------------------------------------------- -``cr_assume_strings_eq(Actual, Expected)`` Assumes Actual and Expected are the same string. +``cr_assume_str_eq(Actual, Expected)`` Assumes Actual and Expected are the same string. ------------------------------------------------------- ---------------------------------------------------- -``cr_assume_strings_neq(Actual, Unexpected)`` Assumes Actual and Expected are not the same string. +``cr_assume_str_neq(Actual, Unexpected)`` Assumes Actual and Expected are not the same string. ------------------------------------------------------- ---------------------------------------------------- -``cr_assume_strings_lt(Actual, Expected)`` Assumes Actual is less than Expected +``cr_assume_str_lt(Actual, Expected)`` Assumes Actual is less than Expected lexicographically. ------------------------------------------------------- ---------------------------------------------------- -``cr_assume_strings_leq(Actual, Expected)`` Assumes Actual is less or equal to Expected +``cr_assume_str_leq(Actual, Expected)`` Assumes Actual is less or equal to Expected lexicographically. ------------------------------------------------------- ---------------------------------------------------- -``cr_assume_strings_gt(Actual, Expected)`` Assumes Actual is greater than Expected +``cr_assume_str_gt(Actual, Expected)`` Assumes Actual is greater than Expected lexicographically. ------------------------------------------------------- ---------------------------------------------------- -``cr_assume_strings_geq(Actual, Expected)`` Assumes Actual is greater or equal to Expected +``cr_assume_str_geq(Actual, Expected)`` Assumes Actual is greater or equal to Expected lexicographically. ------------------------------------------------------- ---------------------------------------------------- -``cr_assume_arrays_eq(Actual, Expected, Size)`` Assumes all elements of Actual (from 0 to Size - 1) +``cr_assume_arr_eq(Actual, Expected, Size)`` Assumes all elements of Actual (from 0 to Size - 1) are equals to those of Expected. ------------------------------------------------------- ---------------------------------------------------- -``cr_assume_arrays_neq(Actual, Unexpected, Size)`` Assumes one or more elements of Actual (from 0 to +``cr_assume_arr_neq(Actual, Unexpected, Size)`` Assumes one or more elements of Actual (from 0 to Size - 1) differs from their counterpart in Expected. ======================================================= ==================================================== diff --git a/include/criterion/theories.h b/include/criterion/theories.h index 29055b53..5cdf76af 100644 --- a/include/criterion/theories.h +++ b/include/criterion/theories.h @@ -111,18 +111,18 @@ struct criterion_datapoints { cr_assume((Expected) - (Actual) > (Epsilon) \ || (Actual) - (Expected) > (Epsilon)) -# define cr_assume_strings_op_(Op, Actual, Expected) \ +# define cr_assume_str_op_(Op, Actual, Expected) \ cr_assume(strcmp((Actual), (Expected)) Op 0) -# define cr_assume_strings_eq(Actual, Expected) cr_assume_strings_op_(==, Actual, Expected) -# define cr_assume_strings_neq(Actual, Expected) cr_assume_strings_op_(!=, Actual, Expected) -# define cr_assume_strings_lt(Actual, Expected) cr_assume_strings_op_(<, Actual, Expected) -# define cr_assume_strings_leq(Actual, Expected) cr_assume_strings_op_(<=, Actual, Expected) -# define cr_assume_strings_gt(Actual, Expected) cr_assume_strings_op_(>, Actual, Expected) -# define cr_assume_strings_geq(Actual, Expected) cr_assume_strings_op_(>=, Actual, Expected) +# define cr_assume_str_eq(Actual, Expected) cr_assume_str_op_(==, Actual, Expected) +# define cr_assume_str_neq(Actual, Expected) cr_assume_str_op_(!=, Actual, Expected) +# define cr_assume_str_lt(Actual, Expected) cr_assume_str_op_(<, Actual, Expected) +# define cr_assume_str_leq(Actual, Expected) cr_assume_str_op_(<=, Actual, Expected) +# define cr_assume_str_gt(Actual, Expected) cr_assume_str_op_(>, Actual, Expected) +# define cr_assume_str_geq(Actual, Expected) cr_assume_str_op_(>=, Actual, Expected) -# define cr_assume_arrays_eq(Actual, Expected, Size) cr_assume(!memcmp((A), (B), (Size))) -# define cr_assume_arrays_neq(Actual, Expected, Size) cr_assume(memcmp((A), (B), (Size))) +# define cr_assume_arr_eq(Actual, Expected, Size) cr_assume(!memcmp((A), (B), (Size))) +# define cr_assume_arr_neq(Actual, Expected, Size) cr_assume(memcmp((A), (B), (Size))) CR_API void cr_theory_main(struct criterion_datapoints *dps, size_t datapoints, void (*fnptr)(void)); @@ -142,4 +142,16 @@ CR_API void cr_theory_main(struct criterion_datapoints *dps, size_t datapoints, CR_END_C_API +# ifndef CRITERION_NO_COMPAT +# define cr_assume_strings_eq(...) CRITERION_ASSERT_DEPRECATED_B(cr_assume_strings_eq, cr_assume_str_eq) cr_assume_str_eq(__VA_ARGS__) +# define cr_assume_strings_neq(...) CRITERION_ASSERT_DEPRECATED_B(cr_assume_strings_neq, cr_assume_str_neq) cr_assume_str_neq(__VA_ARGS__) +# define cr_assume_strings_lt(...) CRITERION_ASSERT_DEPRECATED_B(cr_assume_strings_lt, cr_assume_str_lt) cr_assume_str_lt(__VA_ARGS__) +# define cr_assume_strings_leq(...) CRITERION_ASSERT_DEPRECATED_B(cr_assume_strings_leq, cr_assume_str_leq) cr_assume_str_leq(__VA_ARGS__) +# define cr_assume_strings_gt(...) CRITERION_ASSERT_DEPRECATED_B(cr_assume_strings_gt, cr_assume_str_gt) cr_assume_str_gt(__VA_ARGS__) +# define cr_assume_strings_geq(...) CRITERION_ASSERT_DEPRECATED_B(cr_assume_strings_geq, cr_assume_str_geq) cr_assume_str_geq(__VA_ARGS__) + +# define cr_assume_arrays_eq(...) CRITERION_ASSERT_DEPRECATED_B(cr_assume_arrays_eq, cr_assume_arr_eq) cr_assume_arr_eq(__VA_ARGS__) +# define cr_assume_arrays_neq(...) CRITERION_ASSERT_DEPRECATED_B(cr_assume_arrays_neq, cr_assume_arr_neq) cr_assume_arr_neq(__VA_ARGS__) +# endif + #endif /* !CRITERION_THEORIES_H_ */ From ca85603b0d60073bbb96a8a4617e79aac7ec4451 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 22 Sep 2015 12:14:33 +0200 Subject: [PATCH 006/211] Removed unused include --- src/compat/mockfile.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/compat/mockfile.c b/src/compat/mockfile.c index 4e2716d0..8f662b2e 100644 --- a/src/compat/mockfile.c +++ b/src/compat/mockfile.c @@ -31,7 +31,6 @@ #include "criterion/redirect.h" #ifdef __unix__ -#include <sys/types.h> # ifdef BSD typedef int cr_count; From 3af74ac9dd8c8c6550c7ea4e8daefff1f441f404 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 22 Sep 2015 14:06:36 +0200 Subject: [PATCH 007/211] Added package links for brew and AUR --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 85ec6944..3833265e 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,13 @@ the user would have with other frameworks: ## Downloads +### Packages + +* Mac OS X: `brew install snaipe/soft/criterion` +* [AUR](https://aur.archlinux.org/packages/criterion/): `yaourt -S criterion` + +### Binary archives + * [Linux (x86_64)](https://github.com/Snaipe/Criterion/releases/download/v2.1.0/criterion-v2.1.0-linux-x86_64.tar.bz2) * [OS X (x86_64)](https://github.com/Snaipe/Criterion/releases/download/v2.1.0/criterion-v2.1.0-osx-x86_64.tar.bz2) * [Windows (MSVC - x86_64)](https://github.com/Snaipe/Criterion/releases/download/v2.1.0/criterion-v2.1.0-windows-msvc-x86_64.tar.bz2) From a086aa995cfd3ee0d1555b85b86ca2abca962791 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 22 Sep 2015 21:43:22 +0200 Subject: [PATCH 008/211] Added parallelisation code & cleaned up runner code --- src/compat/process.c | 30 +++- src/compat/process.h | 3 + src/core/coroutine.h | 181 ++++++++++++++++++++++++ src/core/runner.c | 319 ++++++++++++++++++++++++------------------- src/core/runner.h | 2 - src/core/worker.c | 42 ++++-- src/core/worker.h | 40 ++++-- src/io/event.c | 24 ++-- src/io/event.h | 5 + 9 files changed, 465 insertions(+), 181 deletions(-) create mode 100644 src/core/coroutine.h diff --git a/src/compat/process.c b/src/compat/process.c index 72320d25..b107686b 100644 --- a/src/compat/process.c +++ b/src/compat/process.c @@ -126,9 +126,12 @@ static void handle_sigchld(UNUSED int sig) { (s_proc_handle) { pid }, get_status(status) }; - char buf[sizeof (int) + sizeof (struct worker_status)]; + unsigned long long pid_ull = (unsigned long long) pid; + + char buf[sizeof (int) + sizeof (pid_ull) + sizeof (struct worker_status)]; memcpy(buf, &kind, sizeof (kind)); - memcpy(buf + sizeof (kind), &ws, sizeof (ws)); + memcpy(buf + sizeof (kind), &pid_ull, sizeof (pid_ull)); + memcpy(buf + sizeof (kind) + sizeof (pid_ull), &ws, sizeof (ws)); if (write(fd, &buf, sizeof (buf)) < (ssize_t) sizeof (buf)) abort(); @@ -155,9 +158,12 @@ static void CALLBACK handle_child_terminated(PVOID lpParameter, (s_proc_handle) { wctx->proc_handle }, get_status(status) }; - char buf[sizeof (int) + sizeof (struct worker_status)]; + unsigned long long pid_ull = (unsigned long long) GetProcessId(wctx->proc_handle); + + char buf[sizeof (int) + sizeof (pid_ull) + sizeof (struct worker_status)]; memcpy(buf, &kind, sizeof (kind)); - memcpy(buf + sizeof (kind), &ws, sizeof (ws)); + memcpy(buf + sizeof (kind), &pid_ull, sizeof (pid_ull)); + memcpy(buf + sizeof (kind) + sizeof (pid_ull), &ws, sizeof (ws)); DWORD written; WriteFile(g_worker_pipe->fhs[1], buf, sizeof (buf), &written, NULL); @@ -406,3 +412,19 @@ bool is_current_process(s_proc_handle *proc) { return proc->pid == getpid(); #endif } + +unsigned long long get_process_id(void) { +#ifdef VANILLA_WIN32 + return (unsigned long long) GetCurrentProcessId(); +#else + return (unsigned long long) getpid(); +#endif +} + +unsigned long long get_process_id_of(s_proc_handle *proc) { +#ifdef VANILLA_WIN32 + return (unsigned long long) GetProcessId(proc->handle); +#else + return (unsigned long long) proc->pid; +#endif +} diff --git a/src/compat/process.h b/src/compat/process.h index 0d707708..103d835b 100644 --- a/src/compat/process.h +++ b/src/compat/process.h @@ -55,4 +55,7 @@ void wait_process(s_proc_handle *handle, int *status); s_proc_handle *get_current_process(); bool is_current_process(s_proc_handle *proc); +unsigned long long get_process_id(void); +unsigned long long get_process_id_of(s_proc_handle *proc); + #endif /* !COMPAT_PROCESS_H_ */ diff --git a/src/core/coroutine.h b/src/core/coroutine.h new file mode 100644 index 00000000..a8fad9b8 --- /dev/null +++ b/src/core/coroutine.h @@ -0,0 +1,181 @@ +/* coroutine.h + * + * Coroutine mechanics, implemented on top of standard ANSI C. See + * http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html for + * a full discussion of the theory behind this. + * + * To use these macros to define a coroutine, you need to write a + * function that looks something like this. + * + * [Simple version using static variables (scr macros)] + * int ascending (void) { + * static int i; + * + * scrBegin; + * for (i=0; i<10; i++) { + * scrReturn(i); + * } + * scrFinish(-1); + * } + * + * [Re-entrant version using an explicit context structure (ccr macros)] + * int ascending (ccrContParam) { + * ccrBeginContext; + * int i; + * ccrEndContext(foo); + * + * ccrBegin(foo); + * for (foo->i=0; foo->i<10; foo->i++) { + * ccrReturn(foo->i); + * } + * ccrFinish(-1); + * } + * + * In the static version, you need only surround the function body + * with `scrBegin' and `scrFinish', and then you can do `scrReturn' + * within the function and on the next call control will resume + * just after the scrReturn statement. Any local variables you need + * to be persistent across an `scrReturn' must be declared static. + * + * In the re-entrant version, you need to declare your persistent + * variables between `ccrBeginContext' and `ccrEndContext'. These + * will be members of a structure whose name you specify in the + * parameter to `ccrEndContext'. + * + * The re-entrant macros will malloc() the state structure on first + * call, and free() it when `ccrFinish' is reached. If you want to + * abort in the middle, you can use `ccrStop' to free the state + * structure immediately (equivalent to an explicit return() in a + * caller-type routine). + * + * A coroutine returning void type may call `ccrReturnV', + * `ccrFinishV' and `ccrStopV', or `scrReturnV', to avoid having to + * specify an empty parameter to the ordinary return macros. + * + * Ground rules: + * - never put `ccrReturn' or `scrReturn' within an explicit `switch'. + * - never put two `ccrReturn' or `scrReturn' statements on the same + * source line. + * + * The caller of a static coroutine calls it just as if it were an + * ordinary function: + * + * void main(void) { + * int i; + * do { + * i = ascending(); + * printf("got number %d\n", i); + * } while (i != -1); + * } + * + * The caller of a re-entrant coroutine must provide a context + * variable: + * + * void main(void) { + * ccrContext z = 0; + * do { + * printf("got number %d\n", ascending (&z)); + * } while (z); + * } + * + * Note that the context variable is set back to zero when the + * coroutine terminates (by crStop, or by control reaching + * crFinish). This can make the re-entrant coroutines more useful + * than the static ones, because you can tell when they have + * finished. + * + * If you need to dispose of a crContext when it is non-zero (that + * is, if you want to stop calling a coroutine without suffering a + * memory leak), the caller should call `ccrAbort(ctx)' where `ctx' + * is the context variable. + * + * This mechanism could have been better implemented using GNU C + * and its ability to store pointers to labels, but sadly this is + * not part of the ANSI C standard and so the mechanism is done by + * case statements instead. That's why you can't put a crReturn() + * inside a switch() statement. + */ + +/* + * coroutine.h is copyright 1995,2000 Simon Tatham. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * $Id$ + */ + +#ifndef COROUTINE_H +#define COROUTINE_H + +#include <stdlib.h> + +/* + * `scr' macros for static coroutines. + */ + +#define scrBegin static int scrLine = 0; switch(scrLine) { case 0:; +#define scrFinish(z) } return (z) +#define scrFinishV } return + +#define scrReturn(z) \ + do {\ + scrLine=__LINE__;\ + return (z); case __LINE__:;\ + } while (0) +#define scrReturnV \ + do {\ + scrLine=__LINE__;\ + return; case __LINE__:;\ + } while (0) + +/* + * `ccr' macros for re-entrant coroutines. + */ + +#define ccrContParam void **ccrParam + +#define ccrBeginContext struct ccrContextTag { int ccrLine +#define ccrEndContext(x) } *x = (struct ccrContextTag *)*ccrParam + +#define ccrBegin(x) if(!x) {x= *ccrParam=malloc(sizeof(*x)); x->ccrLine=0;}\ + if (x) switch(x->ccrLine) { case 0:; +#define ccrFinish(z) } free(*ccrParam); *ccrParam=0; return (z) +#define ccrFinishV } free(*ccrParam); *ccrParam=0; return + +#define ccrReturn(z) \ + do {\ + ((struct ccrContextTag *)*ccrParam)->ccrLine=__LINE__;\ + return (z); case __LINE__:;\ + } while (0) +#define ccrReturnV \ + do {\ + ((struct ccrContextTag *)*ccrParam)->ccrLine=__LINE__;\ + return; case __LINE__:;\ + } while (0) + +#define ccrStop(z) do{ free(*ccrParam); *ccrParam=0; return (z); }while(0) +#define ccrStopV do{ free(*ccrParam); *ccrParam=0; return; }while(0) + +#define ccrContext void * +#define ccrAbort(ctx) do { free (ctx); ctx = 0; } while (0) + +#endif /* COROUTINE_H */ diff --git a/src/core/runner.c b/src/core/runner.c index a998843c..67b5fad5 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -39,6 +39,7 @@ #include "abort.h" #include "config.h" #include "common.h" +#include "coroutine.h" #ifdef HAVE_PCRE #include "string/extmatch.h" @@ -130,45 +131,6 @@ struct criterion_test_set *criterion_init(void) { return set; } -typedef void (*f_test_run)(struct criterion_global_stats *, - struct criterion_suite_stats *, - struct criterion_test *, - struct criterion_suite *); - -static void map_tests(struct criterion_test_set *set, - struct criterion_global_stats *stats, - f_test_run fun) { - - FOREACH_SET(struct criterion_suite_set *s, set->suites) { - if (!s->tests) - continue; - - report(PRE_SUITE, s); - log(pre_suite, s); - - struct criterion_suite_stats *suite_stats = suite_stats_init(&s->suite); - - struct event ev = { .kind = PRE_SUITE }; - stat_push_event(stats, suite_stats, NULL, &ev); - - FOREACH_SET(struct criterion_test *t, s->tests) { - fun(stats, suite_stats, t, &s->suite); - if (criterion_options.fail_fast && stats->tests_failed > 0) - break; - if (!is_runner()) { - sfree(suite_stats); - return; - } - } - - report(POST_SUITE, suite_stats); - log(post_suite, suite_stats); - - sfree(suite_stats); - } - -} - static void run_test_child(struct criterion_test *test, struct criterion_suite *suite) { @@ -224,17 +186,6 @@ static INLINE bool is_disabled(struct criterion_test *t, s_pipe_handle *g_worker_pipe; -struct execution_context { - bool test_started; - bool normal_finish; - bool cleaned_up; - struct criterion_global_stats *stats; - struct criterion_test *test; - struct criterion_test_stats *test_stats; - struct criterion_suite *suite; - struct criterion_suite_stats *suite_stats; -}; - static void handle_worker_terminated(struct event *ev, struct execution_context *ctx) { @@ -301,120 +252,74 @@ static void handle_worker_terminated(struct event *ev, } } -static void run_test(struct criterion_global_stats *stats, +static void handle_event(struct event *ev) { + struct execution_context *ctx = &ev->worker->ctx; + if (ev->kind < WORKER_TERMINATED) + stat_push_event(ctx->stats, ctx->suite_stats, ctx->test_stats, ev); + switch (ev->kind) { + case PRE_INIT: + report(PRE_INIT, ctx->test); + log(pre_init, ctx->test); + break; + case PRE_TEST: + report(PRE_TEST, ctx->test); + log(pre_test, ctx->test); + ctx->test_started = true; + break; + case THEORY_FAIL: { + struct criterion_theory_stats ths = { + .formatted_args = (char*) ev->data, + .stats = ctx->test_stats, + }; + report(THEORY_FAIL, &ths); + log(theory_fail, &ths); + } break; + case ASSERT: + report(ASSERT, ev->data); + log(assert, ev->data); + break; + case POST_TEST: + report(POST_TEST, ctx->test_stats); + log(post_test, ctx->test_stats); + ctx->normal_finish = true; + break; + case POST_FINI: + report(POST_FINI, ctx->test_stats); + log(post_fini, ctx->test_stats); + ctx->cleaned_up = true; + break; + case WORKER_TERMINATED: + handle_worker_terminated(ev, ctx); + break; + } +} + +static struct process *run_test(struct criterion_global_stats *stats, struct criterion_suite_stats *suite_stats, struct criterion_test *test, struct criterion_suite *suite, struct test_single_param *param) { struct criterion_test_stats *test_stats = test_stats_init(test); - struct process *proc = NULL; if (is_disabled(test, suite)) { stat_push_event(stats, suite_stats, test_stats, &(struct event) { .kind = PRE_INIT }); - goto cleanup; + return NULL; } - proc = spawn_test_worker(test, suite, run_test_child, g_worker_pipe, param); - if (proc == NULL && !is_runner()) - goto cleanup; - struct execution_context ctx = { .stats = stats, .test = test, .test_stats = test_stats, .suite = suite, .suite_stats = suite_stats, + .param = param, }; - struct event *ev; - while ((ev = worker_read_event(proc)) != NULL) { - if (ev->kind < WORKER_TERMINATED) - stat_push_event(stats, suite_stats, test_stats, ev); - switch (ev->kind) { - case PRE_INIT: - report(PRE_INIT, test); - log(pre_init, test); - break; - case PRE_TEST: - report(PRE_TEST, test); - log(pre_test, test); - ctx.test_started = true; - break; - case THEORY_FAIL: { - struct criterion_theory_stats ths = { - .formatted_args = (char*) ev->data, - .stats = test_stats, - }; - report(THEORY_FAIL, &ths); - log(theory_fail, &ths); - } break; - case ASSERT: - report(ASSERT, ev->data); - log(assert, ev->data); - break; - case POST_TEST: - report(POST_TEST, test_stats); - log(post_test, test_stats); - ctx.normal_finish = true; - break; - case POST_FINI: - report(POST_FINI, test_stats); - log(post_fini, test_stats); - ctx.cleaned_up = true; - break; - case WORKER_TERMINATED: - handle_worker_terminated(ev, &ctx); - sfree(ev); - goto cleanup; - } - sfree(ev); - } + return spawn_test_worker(&ctx, run_test_child, g_worker_pipe); -cleanup: - sfree(test_stats); - sfree(proc); -} - -static void run_test_param(struct criterion_global_stats *stats, - struct criterion_suite_stats *suite_stats, - struct criterion_test *test, - struct criterion_suite *suite) { - - if (!test->data->param_) - return; - - struct criterion_test_params params = test->data->param_(); - for (size_t i = 0; i < params.length; ++i) { - struct test_single_param param = { params.size, (char *) params.params + i * params.size }; - - run_test(stats, suite_stats, test, suite, ¶m); - if (criterion_options.fail_fast && stats->tests_failed > 0) - break; - if (!is_runner()) - break; - } - - if (params.cleanup) - params.cleanup(¶ms); -} - -static void run_test_switch(struct criterion_global_stats *stats, - struct criterion_suite_stats *suite_stats, - struct criterion_test *test, - struct criterion_suite *suite) { - - switch (test->data->kind_) { - case CR_TEST_NORMAL: - run_test(stats, suite_stats, test, suite, NULL); - break; - case CR_TEST_PARAMETERIZED: - run_test_param(stats, suite_stats, test, suite); - break; - default: break; - } } #ifdef HAVE_PCRE @@ -450,6 +355,134 @@ void criterion_finalize(struct criterion_test_set *set) { sfree(set); } +static struct process *run_next_test(struct criterion_test_set *p_set, + struct criterion_global_stats *p_stats, + ccrContParam) { + ccrBeginContext; + struct criterion_suite_set *suite_set; + struct criterion_test *test; + struct criterion_suite_stats *suite_stats; + struct criterion_test_set *set; + struct criterion_global_stats *stats; + struct criterion_test_params params; + + struct criterion_ordered_set_node *ns; + struct criterion_ordered_set_node *nt; + size_t i; + ccrEndContext(ctx); + + ccrBegin(ctx); + + ctx->set = p_set; + ctx->stats = p_stats; + ccrReturn(NULL); + + for (ctx->ns = ctx->set->suites->first; ctx->ns; ctx->ns = ctx->ns->next) { + ctx->suite_set = (void*) ctx->ns->data; + + if (!ctx->suite_set->tests) + continue; + + report(PRE_SUITE, ctx->suite_set); + log(pre_suite, ctx->suite_set); + + ctx->suite_stats = suite_stats_init(&ctx->suite_set->suite); + + struct event ev = { .kind = PRE_SUITE }; + stat_push_event(ctx->stats, ctx->suite_stats, NULL, &ev); + + for (ctx->nt = ctx->suite_set->tests->first; ctx->nt; ctx->nt = ctx->nt->next) { + ctx->test = (void*) ctx->nt->data; + + if (ctx->test->data->kind_ == CR_TEST_PARAMETERIZED + && ctx->test->data->param_) { + + ctx->params = ctx->test->data->param_(); + for (ctx->i = 0; ctx->i < ctx->params.length; ++ctx->i) { + struct test_single_param param = { + ctx->params.size, + (char *) ctx->params.params + ctx->i * ctx->params.size + }; + + struct process *worker = run_test(ctx->stats, + ctx->suite_stats, + ctx->test, + &ctx->suite_set->suite, + ¶m); + + if (!is_runner()) { + sfree(ctx->suite_stats); + ccrReturn(NULL); + } + + ccrReturn(worker); + } + + if (ctx->params.cleanup) + ctx->params.cleanup(&ctx->params); + } else { + struct process *worker = run_test(ctx->stats, + ctx->suite_stats, + ctx->test, + &ctx->suite_set->suite, + NULL); + + if (!is_runner()) { + sfree(ctx->suite_stats); + ccrReturn(NULL); + } + + ccrReturn(worker); + } + } + + report(POST_SUITE, ctx->suite_stats); + log(post_suite, ctx->suite_stats); + + sfree(ctx->suite_stats); + } + + ccrFinish(NULL); +} + +static void run_tests_async(struct criterion_test_set *set, + struct criterion_global_stats *stats) { + + ccrContext ctx = 0; + + size_t nb_workers = 1; + struct worker_set workers = { + .max_workers = nb_workers, + .workers = malloc(sizeof (struct process*) * nb_workers), + }; + + size_t active_workers = 0; + + // initialization of coroutine + run_next_test(set, stats, &ctx); + + for (size_t i = 0; i < nb_workers; ++i) { + workers.workers[i] = run_next_test(NULL, NULL, &ctx); + ++active_workers; + } + + FILE *event_pipe = pipe_in(g_worker_pipe, PIPE_DUP); + + struct event *ev; + while ((ev = worker_read_event(&workers, event_pipe)) != NULL) { + handle_event(ev); + if (ev->kind == WORKER_TERMINATED) { + workers.workers[ev->worker_index] = run_next_test(NULL, NULL, &ctx); + if (workers.workers[ev->worker_index] == NULL) + --active_workers; + } + sfree(ev); + if (!active_workers) + break; + } + +} + static int criterion_run_all_tests_impl(struct criterion_test_set *set) { report(PRE_ALL, set); log(pre_all, set); @@ -461,7 +494,7 @@ static int criterion_run_all_tests_impl(struct criterion_test_set *set) { abort(); struct criterion_global_stats *stats = stats_init(); - map_tests(set, stats, run_test_switch); + run_tests_async(set, stats); int result = is_runner() ? stats->tests_failed == 0 : -1; diff --git a/src/core/runner.h b/src/core/runner.h index 0b6ad050..9ddb57f4 100644 --- a/src/core/runner.h +++ b/src/core/runner.h @@ -42,6 +42,4 @@ struct criterion_test_set *criterion_init(void); Suite < (struct criterion_suite**) GET_SECTION_END(cr_sts); \ ++Suite) -extern s_pipe_handle *g_worker_pipe; - #endif /* !CRITERION_RUNNER_H_ */ diff --git a/src/core/worker.c b/src/core/worker.c index 85a945a5..1dd6861e 100644 --- a/src/core/worker.c +++ b/src/core/worker.c @@ -32,11 +32,6 @@ #include "compat/posix.h" #include "worker.h" -struct process { - s_proc_handle *proc; - FILE *in; -}; - static s_proc_handle *g_current_proc; void set_runner_process(void) { @@ -57,8 +52,23 @@ static void close_process(void *ptr, UNUSED void *meta) { sfree(proc->proc); } -struct event *worker_read_event(struct process *proc) { - return read_event(proc->in); +struct event *worker_read_event(struct worker_set *workers, FILE *pipe) { + struct event *ev = read_event(pipe); + if (ev) { + ev->worker_index = -1; + for (size_t i = 0; i < workers->max_workers; ++i) { + if (!workers->workers[i]) + continue; + + if (get_process_id_of(workers->workers[i]->proc) == ev->pid) { + ev->worker = workers->workers[i]; + ev->worker_index = i; + return ev; + } + } + abort(); + } + return NULL; } void run_worker(struct worker_context *ctx) { @@ -74,17 +84,15 @@ void run_worker(struct worker_context *ctx) { _Exit(0); } -struct process *spawn_test_worker(struct criterion_test *test, - struct criterion_suite *suite, +struct process *spawn_test_worker(struct execution_context *ctx, f_worker_func func, - s_pipe_handle *pipe, - struct test_single_param *param) { + s_pipe_handle *pipe) { g_worker_context = (struct worker_context) { - .test = test, - .suite = suite, + .test = ctx->test, + .suite = ctx->suite, .func = func, .pipe = pipe, - .param = param, + .param = ctx->param, }; struct process *ptr = NULL; @@ -102,7 +110,11 @@ struct process *spawn_test_worker(struct criterion_test *test, .kind = UNIQUE, .dtor = close_process); - *ptr = (struct process) { .proc = proc, .in = pipe_in(pipe, PIPE_DUP) }; + *ptr = (struct process) { + .proc = proc, + .in = pipe_in(pipe, PIPE_DUP), + .ctx = *ctx, + }; return ptr; } diff --git a/src/core/worker.h b/src/core/worker.h index ab8bff91..e7b2c7a2 100644 --- a/src/core/worker.h +++ b/src/core/worker.h @@ -29,7 +29,29 @@ # include "compat/process.h" # include "compat/pipe.h" -struct process; +struct test_single_param { + size_t size; + void *ptr; +}; + +struct execution_context { + bool test_started; + bool normal_finish; + bool cleaned_up; + struct criterion_global_stats *stats; + struct criterion_test *test; + struct criterion_test_stats *test_stats; + struct criterion_suite *suite; + struct criterion_suite_stats *suite_stats; + struct test_single_param *param; +}; + +struct process { + int active; + s_proc_handle *proc; + FILE *in; + struct execution_context ctx; +}; enum status_kind { EXIT_STATUS, @@ -47,22 +69,22 @@ struct worker_status { struct process_status status; }; -struct test_single_param { - size_t size; - void *ptr; +struct worker_set { + struct process **workers; + size_t max_workers; }; +extern s_pipe_handle *g_worker_pipe; + void run_worker(struct worker_context *ctx); void set_runner_process(void); void unset_runner_process(void); bool is_runner(void); struct process_status wait_proc(struct process *proc); struct process_status get_status(int status); -struct process *spawn_test_worker(struct criterion_test *test, - struct criterion_suite *suite, +struct process *spawn_test_worker(struct execution_context *ctx, f_worker_func func, - s_pipe_handle *pipe, - struct test_single_param *param); -struct event *worker_read_event(struct process *proc); + s_pipe_handle *pipe); +struct event *worker_read_event(struct worker_set *workers, FILE *pipe); #endif /* !PROCESS_H_ */ diff --git a/src/io/event.c b/src/io/event.c index 1ba6a26f..4760020d 100644 --- a/src/io/event.c +++ b/src/io/event.c @@ -49,6 +49,10 @@ struct event *read_event(FILE *f) { if (fread(&kind, sizeof (unsigned), 1, f) == 0) return NULL; + unsigned long long pid; + if (fread(&pid, sizeof (unsigned long long), 1, f) == 0) + return NULL; + switch (kind) { case ASSERT: { const size_t assert_size = sizeof (struct criterion_assert_stats); @@ -73,7 +77,7 @@ struct event *read_event(FILE *f) { .size = sizeof (struct event), .dtor = destroy_assert_event ); - *ev = (struct event) { .kind = kind, .data = buf }; + *ev = (struct event) { .pid = pid, .kind = kind, .data = buf }; return ev; fail_assert: @@ -96,7 +100,7 @@ struct event *read_event(FILE *f) { .size = sizeof (struct event), .dtor = destroy_event ); - *ev = (struct event) { .kind = kind, .data = buf }; + *ev = (struct event) { .pid = pid, .kind = kind, .data = buf }; return ev; } case POST_TEST: { @@ -110,7 +114,7 @@ struct event *read_event(FILE *f) { .size = sizeof (struct event), .dtor = destroy_event ); - *ev = (struct event) { .kind = kind, .data = elapsed_time }; + *ev = (struct event) { .pid = pid, .kind = kind, .data = elapsed_time }; return ev; } case WORKER_TERMINATED: { @@ -124,22 +128,26 @@ struct event *read_event(FILE *f) { .size = sizeof (struct event), .dtor = destroy_event ); - *ev = (struct event) { .kind = kind, .data = status }; + *ev = (struct event) { .pid = pid, .kind = kind, .data = status }; return ev; } default: { struct event *ev = smalloc(sizeof (struct event)); - *ev = (struct event) { .kind = kind, .data = NULL }; + *ev = (struct event) { .pid = pid, .kind = kind, .data = NULL }; return ev; } } } void send_event(int kind, void *data, size_t size) { - unsigned char *buf = malloc(sizeof (int) + size); + unsigned long long pid = get_process_id(); + + unsigned char *buf = malloc(sizeof (int) + sizeof (pid) + size); memcpy(buf, &kind, sizeof (int)); - memcpy(buf + sizeof (int), data, size); - if (fwrite(buf, sizeof (int) + size, 1, g_event_pipe) == 0) + memcpy(buf + sizeof (int), &pid, sizeof (pid)); + memcpy(buf + sizeof (int) + sizeof (pid), data, size); + if (fwrite(buf, sizeof (int) + sizeof (pid) + size, 1, g_event_pipe) == 0) abort(); + free(buf); } diff --git a/src/io/event.h b/src/io/event.h index 64c30acd..faa54d38 100644 --- a/src/io/event.h +++ b/src/io/event.h @@ -25,13 +25,18 @@ # define EVENT_H_ # include "criterion/event.h" +# include "core/worker.h" # include <stdio.h> extern FILE *g_event_pipe; struct event { + unsigned long long pid; int kind; void *data; + + struct process *worker; + size_t worker_index; }; enum other_event_kinds { From eac6ee518dd7b42b7d202ee2c7c37e953a44341a Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 22 Sep 2015 22:32:32 +0200 Subject: [PATCH 009/211] Fixed various memory and logic errors --- src/core/runner.c | 86 +++++++++++++++++++++++++++++++++-------------- src/core/stats.c | 1 + src/core/worker.c | 8 ++++- 3 files changed, 68 insertions(+), 27 deletions(-) diff --git a/src/core/runner.c b/src/core/runner.c index 67b5fad5..3817bc69 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -296,26 +296,15 @@ static void handle_event(struct event *ev) { static struct process *run_test(struct criterion_global_stats *stats, struct criterion_suite_stats *suite_stats, - struct criterion_test *test, - struct criterion_suite *suite, + struct criterion_test_stats *test_stats, struct test_single_param *param) { - struct criterion_test_stats *test_stats = test_stats_init(test); - - if (is_disabled(test, suite)) { - stat_push_event(stats, - suite_stats, - test_stats, - &(struct event) { .kind = PRE_INIT }); - return NULL; - } - struct execution_context ctx = { - .stats = stats, - .test = test, - .test_stats = test_stats, - .suite = suite, - .suite_stats = suite_stats, + .stats = sref(stats), + .test = test_stats->test, + .test_stats = sref(test_stats), + .suite = suite_stats->suite, + .suite_stats = sref(suite_stats), .param = param, }; return spawn_test_worker(&ctx, run_test_child, g_worker_pipe); @@ -362,6 +351,7 @@ static struct process *run_next_test(struct criterion_test_set *p_set, struct criterion_suite_set *suite_set; struct criterion_test *test; struct criterion_suite_stats *suite_stats; + struct criterion_test_stats *test_stats; struct criterion_test_set *set; struct criterion_global_stats *stats; struct criterion_test_params params; @@ -397,8 +387,20 @@ static struct process *run_next_test(struct criterion_test_set *p_set, if (ctx->test->data->kind_ == CR_TEST_PARAMETERIZED && ctx->test->data->param_) { + if (is_disabled(ctx->test, ctx->suite_stats->suite)) { + ctx->test_stats = test_stats_init(ctx->test); + stat_push_event(ctx->stats, + ctx->suite_stats, + ctx->test_stats, + &(struct event) { .kind = PRE_INIT }); + sfree(ctx->test_stats); + continue; + } + ctx->params = ctx->test->data->param_(); for (ctx->i = 0; ctx->i < ctx->params.length; ++ctx->i) { + ctx->test_stats = test_stats_init(ctx->test); + struct test_single_param param = { ctx->params.size, (char *) ctx->params.params + ctx->i * ctx->params.size @@ -406,12 +408,12 @@ static struct process *run_next_test(struct criterion_test_set *p_set, struct process *worker = run_test(ctx->stats, ctx->suite_stats, - ctx->test, - &ctx->suite_set->suite, + ctx->test_stats, ¶m); if (!is_runner()) { sfree(ctx->suite_stats); + sfree(ctx->test_stats); ccrReturn(NULL); } @@ -421,12 +423,24 @@ static struct process *run_next_test(struct criterion_test_set *p_set, if (ctx->params.cleanup) ctx->params.cleanup(&ctx->params); } else { + ctx->test_stats = test_stats_init(ctx->test); + + if (is_disabled(ctx->test, ctx->suite_stats->suite)) { + stat_push_event(ctx->stats, + ctx->suite_stats, + ctx->test_stats, + &(struct event) { .kind = PRE_INIT }); + sfree(ctx->test_stats); + continue; + } + struct process *worker = run_test(ctx->stats, ctx->suite_stats, - ctx->test, - &ctx->suite_set->suite, + ctx->test_stats, NULL); + sfree(ctx->test_stats); + if (!is_runner()) { sfree(ctx->suite_stats); ccrReturn(NULL); @@ -453,34 +467,54 @@ static void run_tests_async(struct criterion_test_set *set, size_t nb_workers = 1; struct worker_set workers = { .max_workers = nb_workers, - .workers = malloc(sizeof (struct process*) * nb_workers), + .workers = calloc(nb_workers, sizeof (struct process*)), }; size_t active_workers = 0; + FILE *event_pipe = pipe_in(g_worker_pipe, PIPE_DUP); + struct event *ev = NULL; + // initialization of coroutine run_next_test(set, stats, &ctx); for (size_t i = 0; i < nb_workers; ++i) { workers.workers[i] = run_next_test(NULL, NULL, &ctx); + if (!is_runner()) + goto cleanup; + + if (!ctx) + break; ++active_workers; } - FILE *event_pipe = pipe_in(g_worker_pipe, PIPE_DUP); + if (!active_workers) + goto cleanup; - struct event *ev; while ((ev = worker_read_event(&workers, event_pipe)) != NULL) { handle_event(ev); + size_t wi = ev->worker_index; if (ev->kind == WORKER_TERMINATED) { - workers.workers[ev->worker_index] = run_next_test(NULL, NULL, &ctx); - if (workers.workers[ev->worker_index] == NULL) + sfree(workers.workers[wi]); + workers.workers[wi] = ctx ? run_next_test(NULL, NULL, &ctx) : NULL; + + if (!is_runner()) + goto cleanup; + + if (workers.workers[wi] == NULL) --active_workers; } sfree(ev); if (!active_workers) break; } + ev = NULL; +cleanup: + fclose(event_pipe); + sfree(ev); + free(workers.workers); + ccrAbort(ctx); } static int criterion_run_all_tests_impl(struct criterion_test_set *set) { diff --git a/src/core/stats.c b/src/core/stats.c index a9dbe95c..488aa5c4 100644 --- a/src/core/stats.c +++ b/src/core/stats.c @@ -72,6 +72,7 @@ static void destroy_stats(void *ptr, UNUSED void *meta) { s_glob_stats *stats_init(void) { s_glob_stats *stats = smalloc( .size = sizeof (s_glob_stats), + .kind = SHARED, .dtor = destroy_stats ); *stats = (s_glob_stats) { .suites = NULL }; diff --git a/src/core/worker.c b/src/core/worker.c index 1dd6861e..e956176c 100644 --- a/src/core/worker.c +++ b/src/core/worker.c @@ -49,6 +49,9 @@ bool is_runner(void) { static void close_process(void *ptr, UNUSED void *meta) { struct process *proc = ptr; fclose(proc->in); + sfree(proc->ctx.suite_stats); + sfree(proc->ctx.test_stats); + sfree(proc->ctx.stats); sfree(proc->proc); } @@ -102,12 +105,15 @@ struct process *spawn_test_worker(struct execution_context *ctx, abort(); } else if (proc == NULL) { run_worker(&g_worker_context); + sfree(ctx->test_stats); + sfree(ctx->suite_stats); + sfree(ctx->stats); return NULL; } ptr = smalloc( .size = sizeof (struct process), - .kind = UNIQUE, + .kind = SHARED, .dtor = close_process); *ptr = (struct process) { From 40dbcc34087d11e6840d00b85295c961a62518a4 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 22 Sep 2015 23:21:51 +0200 Subject: [PATCH 010/211] Added --jobs CLI switch and CRITERION_JOBS environment variable --- CMakeLists.txt | 2 ++ include/criterion/options.h | 1 + samples/CMakeLists.txt | 2 ++ src/compat/internal.h | 5 ++++ src/compat/posix.h | 1 - src/compat/processor.c | 54 +++++++++++++++++++++++++++++++++++++ src/compat/processor.h | 31 +++++++++++++++++++++ src/core/runner.c | 3 ++- src/entry/main.c | 14 +++++++--- 9 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 src/compat/processor.c create mode 100644 src/compat/processor.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 14068747..4a51244a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,6 +104,8 @@ set(SOURCE_FILES src/compat/posix.h src/compat/alloc.c src/compat/alloc.h + src/compat/processor.c + src/compat/processor.h src/io/redirect.c src/io/event.c src/io/event.h diff --git a/include/criterion/options.h b/include/criterion/options.h index 0bdcdeef..49c05486 100644 --- a/include/criterion/options.h +++ b/include/criterion/options.h @@ -36,6 +36,7 @@ struct criterion_options { bool fail_fast; const char *pattern; bool short_filename; + size_t jobs; }; CR_BEGIN_C_API diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index a80f1afb..dfba5a01 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -65,6 +65,7 @@ macro(add_samples DIR_ SAMPLES_) ENVIRONMENT "CRITERION_ALWAYS_SUCCEED=1" ENVIRONMENT "CRITERION_SHORT_FILENAME=1" ENVIRONMENT "CRITERION_NO_EARLY_EXIT=1" # for coverage + ENVIRONMENT "CRITERION_JOBS=1" # for output ordering ) endif () endforeach() @@ -87,6 +88,7 @@ foreach(script ${SCRIPTS}) ENVIRONMENT "CRITERION_ALWAYS_SUCCEED=1" ENVIRONMENT "CRITERION_SHORT_FILENAME=1" ENVIRONMENT "CRITERION_NO_EARLY_EXIT=1" # for coverage + ENVIRONMENT "CRITERION_JOBS=1" # for output ordering ) endforeach() diff --git a/src/compat/internal.h b/src/compat/internal.h index 29b73ab7..fd5e8af7 100644 --- a/src/compat/internal.h +++ b/src/compat/internal.h @@ -40,6 +40,11 @@ # include <sys/wait.h> # include <sys/signal.h> # include <sys/fcntl.h> +# include <sys/param.h> +# ifdef BSD +# include <sys/types.h> +# include <sys/sysctl.h> +# endif # endif # include "posix.h" diff --git a/src/compat/posix.h b/src/compat/posix.h index 930225a6..043562db 100644 --- a/src/compat/posix.h +++ b/src/compat/posix.h @@ -55,7 +55,6 @@ # define SIGPROF 27 # define CR_EXCEPTION_TIMEOUT 0xC0001042 # else -# include <sys/param.h> # include <sys/wait.h> # endif diff --git a/src/compat/processor.c b/src/compat/processor.c new file mode 100644 index 00000000..b0f5244c --- /dev/null +++ b/src/compat/processor.c @@ -0,0 +1,54 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "internal.h" + +size_t get_processor_count(void) { +#ifdef _WIN32 + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + + return (size_t) sysinfo.dwNumberOfProcessors; +#elif defined(BSD) + int mib[2] = { CTL_HW, HW_AVAILCPU }; + long long count; + size_t len = sizeof (count); + + /* get the number of CPUs from the system */ + sysctl(mib, 2, &count, &len, NULL, 0); + + if (count < 1) { + mib[1] = HW_NCPU; + sysctl(mib, 2, &count, &len, NULL, 0); + + if (count < 1) + count = 1; + } + return (size_t) count; +#elif defined(__linux__) + return sysconf(_SC_NPROCESSORS_ONLN); +#else +# error System not supported +#endif +} diff --git a/src/compat/processor.h b/src/compat/processor.h new file mode 100644 index 00000000..5e6e35ba --- /dev/null +++ b/src/compat/processor.h @@ -0,0 +1,31 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef COMPAT_PROCESSOR_H_ +# define COMPAT_PROCESSOR_H_ + +# include <stddef.h> + +size_t get_processor_count(void); + +#endif /* !COMPAT_PROCESSOR_H_ */ diff --git a/src/core/runner.c b/src/core/runner.c index 3817bc69..2a29c485 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -30,6 +30,7 @@ #include "criterion/logging.h" #include "compat/time.h" #include "compat/posix.h" +#include "compat/processor.h" #include "string/i18n.h" #include "io/event.h" #include "stats.h" @@ -464,7 +465,7 @@ static void run_tests_async(struct criterion_test_set *set, ccrContext ctx = 0; - size_t nb_workers = 1; + size_t nb_workers = DEF(criterion_options.jobs, get_processor_count()); struct worker_set workers = { .max_workers = nb_workers, .workers = calloc(nb_workers, sizeof (struct process*)), diff --git a/src/entry/main.c b/src/entry/main.c index 5551886b..6fb07879 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -120,6 +120,11 @@ int list_tests(bool unicode) { return 0; } +int atou(const char *str) { + int res = atoi(str); + return res < 0 ? 0 : res; +} + int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { static struct option opts[] = { {"verbose", optional_argument, 0, 'b'}, @@ -128,6 +133,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { {"help", no_argument, 0, 'h'}, {"list", no_argument, 0, 'l'}, {"ascii", no_argument, 0, 'k'}, + {"jobs", required_argument, 0, 'j'}, {"fail-fast", no_argument, 0, 'f'}, {"short-filename", no_argument, 0, 'S'}, #ifdef HAVE_PCRE @@ -151,7 +157,8 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { opt->no_early_exit = !strcmp("1", DEF(getenv("CRITERION_NO_EARLY_EXIT") , "0")); opt->fail_fast = !strcmp("1", DEF(getenv("CRITERION_FAIL_FAST") , "0")); opt->use_ascii = use_ascii; - opt->logging_threshold = atoi(DEF(getenv("CRITERION_VERBOSITY_LEVEL"), "2")); + opt->jobs = atou(DEF(getenv("CRITERION_JOBS"), "0")); + opt->logging_threshold = atou(DEF(getenv("CRITERION_VERBOSITY_LEVEL"), "2")); opt->short_filename = !strcmp("1", DEF(getenv("CRITERION_SHORT_FILENAME"), "0")); #ifdef HAVE_PCRE opt->pattern = getenv("CRITERION_TEST_PATTERN"); @@ -162,12 +169,13 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { bool do_list_tests = false; bool do_print_version = false; bool do_print_usage = false; - for (int c; (c = getopt_long(argc, argv, "hvlfS", opts, NULL)) != -1;) { + for (int c; (c = getopt_long(argc, argv, "hvlfj:S", opts, NULL)) != -1;) { switch (c) { - case 'b': criterion_options.logging_threshold = atoi(DEF(optarg, "1")); break; + case 'b': criterion_options.logging_threshold = atou(DEF(optarg, "1")); break; case 'y': criterion_options.always_succeed = true; break; case 'z': criterion_options.no_early_exit = true; break; case 'k': criterion_options.use_ascii = true; break; + case 'j': criterion_options.jobs = atou(optarg); break; case 'f': criterion_options.fail_fast = true; break; case 'S': criterion_options.short_filename = true; break; #ifdef HAVE_PCRE From 2c76e45479aa4f0084200de9104726429006dd39 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 22 Sep 2015 23:30:53 +0200 Subject: [PATCH 011/211] Fixed missing typedefs on BSD --- src/compat/internal.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/compat/internal.h b/src/compat/internal.h index fd5e8af7..43ff62d8 100644 --- a/src/compat/internal.h +++ b/src/compat/internal.h @@ -43,6 +43,10 @@ # include <sys/param.h> # ifdef BSD # include <sys/types.h> +typedef unsigned long u_long; +typedef unsigned int u_int; +typedef unsigned short u_short; +typedef unsigned char u_char; # include <sys/sysctl.h> # endif # endif From 080c10ebad8c9bee711cdd47112a5028a6ba6d75 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 00:34:30 +0200 Subject: [PATCH 012/211] Fixed clang warnings over partial initialization in coroutine --- src/core/runner.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/runner.c b/src/core/runner.c index 2a29c485..2fef2f76 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -416,9 +416,9 @@ static struct process *run_next_test(struct criterion_test_set *p_set, sfree(ctx->suite_stats); sfree(ctx->test_stats); ccrReturn(NULL); + } else { + ccrReturn(worker); } - - ccrReturn(worker); } if (ctx->params.cleanup) @@ -445,9 +445,9 @@ static struct process *run_next_test(struct criterion_test_set *p_set, if (!is_runner()) { sfree(ctx->suite_stats); ccrReturn(NULL); + } else { + ccrReturn(worker); } - - ccrReturn(worker); } } From ace14dc3bc8c89e16e92c1b7cc750bf242e11dd4 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 00:42:30 +0200 Subject: [PATCH 013/211] Fixed sysctl errors being ignored when getting the number of processors on BSD --- src/compat/processor.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/compat/processor.c b/src/compat/processor.c index b0f5244c..ba7ab9fb 100644 --- a/src/compat/processor.c +++ b/src/compat/processor.c @@ -32,17 +32,17 @@ size_t get_processor_count(void) { return (size_t) sysinfo.dwNumberOfProcessors; #elif defined(BSD) int mib[2] = { CTL_HW, HW_AVAILCPU }; - long long count; + long long count = 0; size_t len = sizeof (count); /* get the number of CPUs from the system */ - sysctl(mib, 2, &count, &len, NULL, 0); + int res = sysctl(mib, 2, &count, &len, NULL, 0); - if (count < 1) { + if (count < 1 || res == -1) { mib[1] = HW_NCPU; - sysctl(mib, 2, &count, &len, NULL, 0); + res = sysctl(mib, 2, &count, &len, NULL, 0); - if (count < 1) + if (count < 1 || res == -1) count = 1; } return (size_t) count; From f90131d6beef367c1746e45bffb9868dd00c5978 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 00:59:12 +0200 Subject: [PATCH 014/211] Fixed invalid platform name for x64 in appveyor config --- README.md | 2 ++ appveyor.yml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3833265e..85be12f6 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,8 @@ the user would have with other frameworks: * [Windows (MSVC - x86_64)](https://github.com/Snaipe/Criterion/releases/download/v2.1.0/criterion-v2.1.0-windows-msvc-x86_64.tar.bz2) * [Windows (MinGW - x86_64)](https://github.com/Snaipe/Criterion/releases/download/v2.1.0/criterion-v2.1.0-windows-mingw-x86_64.tar.bz2) +[comment]: # (Don't forget to change x86_64 to x64 on windows links on the next release) + If you have a different platform, you can still [build the library from source](http://criterion.readthedocs.org/en/latest/setup.html#installation) ## Developer Resources diff --git a/appveyor.yml b/appveyor.yml index 29952bb7..1f71d410 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -22,7 +22,7 @@ clone_depth: 5 platform: - x86 - - x86_64 + - x64 configuration: - Debug From a6f2bbb4c27cac8a2a6f9c052d8dd118bcd86580 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 01:48:39 +0200 Subject: [PATCH 015/211] Boyscouting. --- src/compat/pipe.h | 5 +++-- src/compat/process.c | 10 ---------- src/core/runner.c | 10 +++++----- src/core/worker.c | 17 +++++------------ src/core/worker.h | 8 ++++---- src/io/event.h | 2 +- 6 files changed, 18 insertions(+), 34 deletions(-) diff --git a/src/compat/pipe.h b/src/compat/pipe.h index 83aa63db..c2f7d13a 100644 --- a/src/compat/pipe.h +++ b/src/compat/pipe.h @@ -25,6 +25,7 @@ # define PIPE_H_ # include <stdio.h> +# include <stdlib.h> # include "common.h" struct pipe_handle; @@ -53,13 +54,13 @@ FILE *pipe_out(s_pipe_handle *p, enum pipe_opt opts); int stdpipe_options(s_pipe_handle *pipe, int id, int noblock); void pipe_std_redirect(s_pipe_handle *pipe, enum criterion_std_fd fd); -INLINE FILE* get_std_file(int fd_kind) { +INLINE FILE* get_std_file(enum criterion_std_fd fd_kind) { switch (fd_kind) { case CR_STDIN: return stdin; case CR_STDOUT: return stdout; case CR_STDERR: return stderr; } - return NULL; + abort(); } extern s_pipe_handle *stdout_redir; diff --git a/src/compat/process.c b/src/compat/process.c index b107686b..08b66255 100644 --- a/src/compat/process.c +++ b/src/compat/process.c @@ -385,16 +385,6 @@ s_proc_handle *fork_process() { #endif } -void wait_process(s_proc_handle *handle, int *status) { -#ifdef VANILLA_WIN32 - WaitForSingleObject(handle->handle, INFINITE); - *status = get_win_status(handle->handle); - CloseHandle(handle->handle); -#else - waitpid(handle->pid, status, 0); -#endif -} - s_proc_handle *get_current_process() { s_proc_handle *handle = smalloc(sizeof (s_proc_handle)); #ifdef VANILLA_WIN32 diff --git a/src/core/runner.c b/src/core/runner.c index 2fef2f76..abb25c96 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -295,7 +295,7 @@ static void handle_event(struct event *ev) { } } -static struct process *run_test(struct criterion_global_stats *stats, +static struct worker *run_test(struct criterion_global_stats *stats, struct criterion_suite_stats *suite_stats, struct criterion_test_stats *test_stats, struct test_single_param *param) { @@ -345,7 +345,7 @@ void criterion_finalize(struct criterion_test_set *set) { sfree(set); } -static struct process *run_next_test(struct criterion_test_set *p_set, +static struct worker *run_next_test(struct criterion_test_set *p_set, struct criterion_global_stats *p_stats, ccrContParam) { ccrBeginContext; @@ -407,7 +407,7 @@ static struct process *run_next_test(struct criterion_test_set *p_set, (char *) ctx->params.params + ctx->i * ctx->params.size }; - struct process *worker = run_test(ctx->stats, + struct worker *worker = run_test(ctx->stats, ctx->suite_stats, ctx->test_stats, ¶m); @@ -435,7 +435,7 @@ static struct process *run_next_test(struct criterion_test_set *p_set, continue; } - struct process *worker = run_test(ctx->stats, + struct worker *worker = run_test(ctx->stats, ctx->suite_stats, ctx->test_stats, NULL); @@ -468,7 +468,7 @@ static void run_tests_async(struct criterion_test_set *set, size_t nb_workers = DEF(criterion_options.jobs, get_processor_count()); struct worker_set workers = { .max_workers = nb_workers, - .workers = calloc(nb_workers, sizeof (struct process*)), + .workers = calloc(nb_workers, sizeof (struct worker*)), }; size_t active_workers = 0; diff --git a/src/core/worker.c b/src/core/worker.c index e956176c..8912b193 100644 --- a/src/core/worker.c +++ b/src/core/worker.c @@ -47,7 +47,7 @@ bool is_runner(void) { } static void close_process(void *ptr, UNUSED void *meta) { - struct process *proc = ptr; + struct worker *proc = ptr; fclose(proc->in); sfree(proc->ctx.suite_stats); sfree(proc->ctx.test_stats); @@ -87,7 +87,7 @@ void run_worker(struct worker_context *ctx) { _Exit(0); } -struct process *spawn_test_worker(struct execution_context *ctx, +struct worker *spawn_test_worker(struct execution_context *ctx, f_worker_func func, s_pipe_handle *pipe) { g_worker_context = (struct worker_context) { @@ -98,7 +98,7 @@ struct process *spawn_test_worker(struct execution_context *ctx, .param = ctx->param, }; - struct process *ptr = NULL; + struct worker *ptr = NULL; s_proc_handle *proc = fork_process(); if (proc == (void *) -1) { @@ -112,11 +112,11 @@ struct process *spawn_test_worker(struct execution_context *ctx, } ptr = smalloc( - .size = sizeof (struct process), + .size = sizeof (struct worker), .kind = SHARED, .dtor = close_process); - *ptr = (struct process) { + *ptr = (struct worker) { .proc = proc, .in = pipe_in(pipe, PIPE_DUP), .ctx = *ctx, @@ -139,10 +139,3 @@ struct process_status get_status(int status) { return (struct process_status) { .kind = STOPPED }; } - -struct process_status wait_proc(struct process *proc) { - int status; - wait_process(proc->proc, &status); - - return get_status(status); -} diff --git a/src/core/worker.h b/src/core/worker.h index e7b2c7a2..865ab966 100644 --- a/src/core/worker.h +++ b/src/core/worker.h @@ -46,7 +46,7 @@ struct execution_context { struct test_single_param *param; }; -struct process { +struct worker { int active; s_proc_handle *proc; FILE *in; @@ -70,7 +70,7 @@ struct worker_status { }; struct worker_set { - struct process **workers; + struct worker **workers; size_t max_workers; }; @@ -80,9 +80,9 @@ void run_worker(struct worker_context *ctx); void set_runner_process(void); void unset_runner_process(void); bool is_runner(void); -struct process_status wait_proc(struct process *proc); +struct process_status wait_proc(struct worker *proc); struct process_status get_status(int status); -struct process *spawn_test_worker(struct execution_context *ctx, +struct worker *spawn_test_worker(struct execution_context *ctx, f_worker_func func, s_pipe_handle *pipe); struct event *worker_read_event(struct worker_set *workers, FILE *pipe); diff --git a/src/io/event.h b/src/io/event.h index faa54d38..641c9660 100644 --- a/src/io/event.h +++ b/src/io/event.h @@ -35,7 +35,7 @@ struct event { int kind; void *data; - struct process *worker; + struct worker *worker; size_t worker_index; }; From fbd6d3dba053fa69ee04f4b83d586e2f01c1d28e Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 02:11:06 +0200 Subject: [PATCH 016/211] Added documentation for --jobs and CRITERION_JOBS --- doc/env.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/env.rst b/doc/env.rst index 745ff9ba..80a36057 100644 --- a/doc/env.rst +++ b/doc/env.rst @@ -13,6 +13,8 @@ Command line arguments * ``-l or --list``: Print all the tests in a list. * ``-f or --fail-fast``: Exit after the first test failure. * ``--ascii``: Don't use fancy unicode symbols or colors in the output. +* ``-jN or --jobs N``: Use ``N`` parallel jobs to run the tests. ``0`` picks + a number of jobs ideal for your hardware configuration. * ``--pattern [PATTERN]``: Run tests whose string identifier matches the given shell wildcard pattern (see dedicated section below). (\*nix only) * ``--no-early-exit``: The test workers shall not prematurely exit when done and @@ -60,6 +62,8 @@ Environment variables are alternatives to command line switches when set to 1. * ``CRITERION_ENABLE_TAP``: Same as ``--tap``. * ``CRITERION_FAIL_FAST``: Same as ``--fail-fast``. * ``CRITERION_USE_ASCII``: Same as ``--ascii``. +* ``CRITERION_JOBS``: Same as ``jobs``. Sets the number of jobs to + its value. * ``CRITERION_SHORT_FILENAME``: Same as ``--short-filename``. * ``CRITERION_VERBOSITY_LEVEL``: Same as ``--verbose``. Sets the verbosity level to its value. From 7d4896da07bb5fe7c57fc0fd65bb7d8a11eedc19 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 02:19:11 +0200 Subject: [PATCH 017/211] Updated documentation to mention extglob patterns --- doc/env.rst | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/doc/env.rst b/doc/env.rst index 80a36057..97ab252c 100644 --- a/doc/env.rst +++ b/doc/env.rst @@ -29,23 +29,34 @@ Command line arguments Shell Wildcard Pattern ---------------------- -Patterns in criterion are matched against a test's string identifier with -``fnmatch``. This feature is only available on \*nix systems where ``fnmatch`` -is provided. +Extglob patterns in criterion are matched against a test's string identifier. +This feature is only available on \*nix systems where ``PCRE`` is provided. -Special characters used in shell-style wildcard patterns are: +In the table below, a ``pattern-list`` is a list of patterns separated by ``|``. +Any extglob pattern can be constructed by combining any of the following +sub-patterns: -=========== =================================== -Pattern Meaning -=========== =================================== -``*`` matches everything ------------ ----------------------------------- -``?`` matches any character ------------ ----------------------------------- -``[seq]`` matches any character in *seq* ------------ ----------------------------------- -``[!seq]`` matches any character not in *seq* -=========== =================================== +==================== ====================================================== +Pattern Meaning +==================== ====================================================== +``*`` matches everything +-------------------- ------------------------------------------------------ +``?`` matches any character +-------------------- ------------------------------------------------------ +``[seq]`` matches any character in *seq* +-------------------- ------------------------------------------------------ +``[!seq]`` matches any character not in *seq* +-------------------- ------------------------------------------------------ +``?(pattern-list)`` Matches zero or one occurrence of the given patterns +-------------------- ------------------------------------------------------ +``*(pattern-list)`` Matches zero or more occurrences of the given patterns +-------------------- ------------------------------------------------------ +``+(pattern-list)`` Matches one or more occurrences of the given patterns +-------------------- ------------------------------------------------------ +``@(pattern-list)`` Matches one of the given patterns +-------------------- ------------------------------------------------------ +``!(pattern-list)`` Matches anything except one of the given patterns +==================== ====================================================== A test string identifier is of the form ``suite-name/test-name``, so a pattern of ``simple/*`` matches every tests in the ``simple`` suite, ``*/passing`` From 7263020d74bd006e1e066b317fad733d4e4af19c Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 14:09:49 +0200 Subject: [PATCH 018/211] Updated documentation intro [ci skip] --- doc/intro.rst | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/intro.rst b/doc/intro.rst index e2a11250..5d2792e9 100644 --- a/doc/intro.rst +++ b/doc/intro.rst @@ -1,8 +1,7 @@ Introduction ============ -Criterion is a dead-simple, non-intrusive testing framework for the C -programming language. +Criterion is a dead-simple, non-intrusive unit testing framework for C and C++. Philosophy ---------- @@ -20,12 +19,15 @@ the user would have with other frameworks. Features -------- +* C99 and C++11 compatible. * Tests are automatically registered when declared. +* Implements a xUnit framework structure. * A default entry point is provided, no need to declare a main unless you want to do special handling. * Test are isolated in their own process, crashes and signals can be reported and tested. +* Unified interface between C and C++: include the criterion header and it *just* works. +* Supports parameterized tests and theories. * Progress and statistics can be followed in real time with report hooks. * TAP output format can be enabled with an option. -* Runs on Linux, FreeBSD, Mac OS X, and Windows (Compiling with MinGW GCC). -* xUnit framework structure +* Runs on Linux, FreeBSD, Mac OS X, and Windows (Compiling with MinGW GCC and Visual Studio 2015+). From 473d91ea18f0124298cbc517a26a15603a5d41b2 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 14:10:30 +0200 Subject: [PATCH 019/211] Removed readme FAQ [ci skip] --- README.md | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/README.md b/README.md index 85be12f6..54ebc939 100644 --- a/README.md +++ b/README.md @@ -81,21 +81,6 @@ Gitter.im chat room: [ high-level languages have test frameworks with automatic - test registration, but all the ones for C require you to set up a - main, manually register suites, then tests. Criterion tries to - fix these shortcomings. - -**Q. Where has this been tested?** -A. Currently, on Linux 2.6.32 and Linux 3.15.7, although it should work on - most \*nix systems; Mac OS X Yosemite 10.10, FreeBSD 10.0, Windows 7 and 2K. - ## Credits Logo done by [Greehm](http://www.cargocollective.com/pbouigue) From 350eb235b1ebb6f85d03e86345f1f227354b097e Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 14:11:33 +0200 Subject: [PATCH 020/211] [Issue #53] Removed ext/stdio_sync_filebuf.h --- include/criterion/redirect.h | 156 +++++++++++++++++++++++++++++------ 1 file changed, 130 insertions(+), 26 deletions(-) diff --git a/include/criterion/redirect.h b/include/criterion/redirect.h index 4851b3dc..effb9094 100644 --- a/include/criterion/redirect.h +++ b/include/criterion/redirect.h @@ -31,18 +31,6 @@ # include <cstdio> # include <memory> # include <fstream> - -# ifdef __GNUC__ -# if defined(__MINGW32__) || defined(__MINGW64__) -# define off_t _off_t -# define off64_t _off64_t -# endif -# include <ext/stdio_sync_filebuf.h> -# if defined(__MINGW32__) || defined(__MINGW64__) -# undef off_t -# undef off64_t -# endif -# endif # else # include <stdio.h> # endif @@ -143,37 +131,155 @@ CR_END_C_API # ifdef __cplusplus namespace criterion { + template <typename CharT, typename Traits = std::char_traits<CharT>> + class stdio_sync_filebuf : public std::basic_streambuf<CharT, Traits> { + public: + typedef Traits traits; + typedef std::basic_filebuf<CharT, Traits> super; + typedef typename Traits::int_type int_type; + typedef typename Traits::pos_type pos_type; + typedef typename Traits::off_type off_type; + + stdio_sync_filebuf(std::FILE *file) + : file(file) + , lastchar(Traits::eof()) + {} + + stdio_sync_filebuf(stdio_sync_filebuf&& other) = default; + stdio_sync_filebuf& operator=(stdio_sync_filebuf&& other) = default; + + void swap(stdio_sync_filebuf& other) { + super::swap(other); + std::swap(file, other.file); + std::swap(lastchar, other.lastchar); + } + + protected: + int_type syncgetc(); + int_type syncungetc(int_type); + int_type syncputc(int_type); + + virtual std::streampos seekoff(std::streamoff off, + std::ios_base::seekdir dir, + std::ios_base::openmode = std::ios_base::in | std::ios_base::out) { + + int whence; + if (dir == std::ios_base::beg) + whence = SEEK_SET; + else if (dir == std::ios_base::cur) + whence = SEEK_CUR; + else + whence = SEEK_END; + + if (!fseek(file, off, whence)) + return std::streampos(std::ftell(file)); + return std::streamoff(-1); + } + + virtual std::streampos seekpos(std::streampos pos, + std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) { + return seekoff(std::streamoff(pos), std::ios_base::beg, mode); + } + + virtual std::streamsize xsgetn(CharT* s, std::streamsize n); + virtual std::streamsize xsputn(const CharT* s, std::streamsize n); + + virtual int sync() { + return std::fflush(file); + } + + virtual int_type underflow() { + int_type c = syncgetc(); + return syncungetc(c); + } + + virtual int_type uflow() { + return lastchar = syncgetc(); + } + + static inline bool is_eof(int_type c) { + static const int_type eof = Traits::eof(); + return Traits::eq_int_type(c, eof); + } + + virtual int_type overflow(int_type c = Traits::eof()) { + int_type ret; + if (is_eof(c)) { + if (std::fflush(file)) + ret = Traits::eof(); + else + ret = Traits::not_eof(c); + } else { + ret = syncputc(c); + } + return ret; + } + + virtual int_type pbackfail(int_type c = Traits::eof()) { + int_type ret = syncungetc(is_eof(c) && !is_eof(lastchar) ? lastchar : c); + lastchar = Traits::eof(); + return ret; + } + + private: + std::FILE *file; + bool file_open; + int_type lastchar; + }; + + template <> + inline stdio_sync_filebuf<char>::int_type + stdio_sync_filebuf<char>::syncgetc() { + return std::getc(file); + } + + template <> + inline stdio_sync_filebuf<char>::int_type + stdio_sync_filebuf<char>::syncungetc(stdio_sync_filebuf<char>::int_type c) { + return std::ungetc(c, file); + } + + template <> + inline stdio_sync_filebuf<char>::int_type + stdio_sync_filebuf<char>::syncputc(stdio_sync_filebuf<char>::int_type c) { + return std::putc(c, file); + } + + template <> + inline std::streamsize + stdio_sync_filebuf<char>::xsgetn(char *s, std::streamsize n) { + std::streamsize res = std::fread(s, 1, n, file); + lastchar = res > 0 ? traits::to_int_type(s[res - 1]) : traits::eof(); + return res; + } + + template <> + inline std::streamsize + stdio_sync_filebuf<char>::xsputn(const char *s, std::streamsize n) { + return std::fwrite(s, 1, n, file); + } + template <typename CharT, typename Super> class stream_mixin : public Super { public: stream_mixin(FILE* f) -# ifdef __GNUC__ : Super() - , fbuf(new ::__gnu_cxx::stdio_sync_filebuf<CharT>(f)) -# else - : Super(f) -# endif + , fbuf(new stdio_sync_filebuf<CharT>(f)) , file(f) { -# ifdef __GNUC__ std::ios::rdbuf(&*fbuf); -# endif } stream_mixin(const stream_mixin& other) = delete; stream_mixin& operator=(const stream_mixin& other) = delete; stream_mixin(stream_mixin&& other) : -# ifdef __GNUC__ fbuf(std::move(other.fbuf)), -# endif file(std::move(other.file)) {} stream_mixin& operator=(stream_mixin&& other) { -# ifdef __GNUC__ fbuf = std::move(other.fbuf); -# endif file = std::move(other.file); } @@ -184,9 +290,7 @@ namespace criterion { } private: -# ifdef __GNUC__ - std::shared_ptr<::__gnu_cxx::stdio_sync_filebuf<CharT>> fbuf; -# endif + std::shared_ptr<stdio_sync_filebuf<CharT>> fbuf; std::FILE* file; }; From 05812ca34ec706f15f830efb208ab473908fbe58 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 19:21:32 +0200 Subject: [PATCH 021/211] Fixed buggy delete_arr --- include/criterion/alloc.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/criterion/alloc.h b/include/criterion/alloc.h index 741b999d..4fd6ee02 100644 --- a/include/criterion/alloc.h +++ b/include/criterion/alloc.h @@ -86,11 +86,12 @@ namespace criterion { template<typename T> void delete_arr(T* ptr) { - size_t len = *(reinterpret_cast<size_t*>(ptr)); - T* arr = reinterpret_cast<T*>(reinterpret_cast<size_t*>(ptr) + 1); + size_t *ptr_ = reinterpret_cast<size_t*>(ptr); + size_t len = *(ptr_ - 1); + T* arr = reinterpret_cast<T*>(ptr_); for (size_t i = 0; i < len; ++i) arr[i].~T(); - cr_free(ptr); + cr_free(ptr_ - 1); } } From 37a043147f16235ba5ed2dde6a0c3ad7d212caa9 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 19:22:55 +0200 Subject: [PATCH 022/211] [Issue #54] Added custom allocator for cr_malloc/cr_free --- include/criterion/alloc.h | 50 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/include/criterion/alloc.h b/include/criterion/alloc.h index 4fd6ee02..eb687946 100644 --- a/include/criterion/alloc.h +++ b/include/criterion/alloc.h @@ -24,7 +24,13 @@ #ifndef CRITERION_ALLOC_H_ # define CRITERION_ALLOC_H_ -# include <stddef.h> +# ifdef __cplusplus +# include <memory> +# include <cstddef> +using std::size_t; +# else +# include <stddef.h> +# endif # include "common.h" CR_BEGIN_C_API @@ -94,6 +100,48 @@ namespace criterion { cr_free(ptr_ - 1); } + template<typename T> + struct allocator { + typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; + typedef const value_type& const_reference; + typedef std::size_t size_type; + typedef std::ptrdiff_t difference_type; + + template<typename U> + struct rebind { + typedef allocator<U> other; + }; + + inline explicit allocator() {} + inline ~allocator() {} + inline explicit allocator(allocator const&) {} + template<typename U> + inline explicit allocator(allocator<U> const&) {} + + inline pointer address(reference r) { return &r; } + inline const_pointer address(const_reference r) { return &r; } + + inline pointer allocate(size_type cnt, typename std::allocator<void>::const_pointer = 0) { + return reinterpret_cast<pointer>(cr_malloc(cnt * sizeof (T))); + } + + inline void deallocate(pointer p, size_type) { cr_free(p); } + + inline size_type max_size() const { + return size_type(-1) / sizeof(T); + } + + inline void construct(pointer p, const T& t) { new(p) T(t); } + inline void construct(pointer p, T&& t) { new (p) T(std::move(t)); } + inline void destroy(pointer p) { p->~T(); } + + inline bool operator==(allocator const&) { return true; } + inline bool operator!=(allocator const& a) { return !operator==(a); } + }; + } # endif From 2b66cda5245d10effb3ddf1b3ed231347bbc966a Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 20:10:00 +0200 Subject: [PATCH 023/211] Added criterion::parameters for simpler C++ parameter generation --- include/criterion/parameterized.h | 11 +++++++++++ include/criterion/types.h | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/criterion/parameterized.h b/include/criterion/parameterized.h index 6bfec4ef..d5cde423 100644 --- a/include/criterion/parameterized.h +++ b/include/criterion/parameterized.h @@ -2,6 +2,10 @@ # define CRITERION_PARAMETERIZED_H_ # include "criterion.h" +# include "alloc.h" +# ifdef __cplusplus +# include <vector> +# endif # ifdef __cplusplus # define CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name) \ @@ -47,4 +51,11 @@ (struct criterion_test_params) { .size = sizeof (Type), (void*)(Array), __VA_ARGS__ } # endif +# ifdef __cplusplus +namespace criterion { + template <typename T> + using parameters = std::vector<T, criterion::allocator<T>>; +} +# endif + #endif /* !CRITERION_PARAMETERIZED_H_ */ diff --git a/include/criterion/types.h b/include/criterion/types.h index 7e98bc81..d3dada34 100644 --- a/include/criterion/types.h +++ b/include/criterion/types.h @@ -24,8 +24,10 @@ #ifndef CRITERION_TYPES_H_ # define CRITERION_TYPES_H_ +# include "alloc.h" # ifdef __cplusplus # include <cstddef> +# include <vector> using std::size_t; # else # include <stdbool.h> @@ -59,6 +61,14 @@ struct criterion_test_params { , length(length) , cleanup(cleanup) {} + + template <typename T> + constexpr criterion_test_params(std::vector<T, criterion::allocator<T>>& vec) + : size(sizeof (T)) + , params(&vec[0]) + , length(vec.size()) + , cleanup(nullptr) + {} # endif }; From b773bb61c33e14fd64ec640343499a4bea4347d2 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 20:11:35 +0200 Subject: [PATCH 024/211] Added C++ version of parameterized sample --- samples/CMakeLists.txt | 1 + samples/parameterized.cc | 75 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 samples/parameterized.cc diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index dfba5a01..7bde575c 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -29,6 +29,7 @@ set(SAMPLES simple.cc theories.cc redirect.cc + parameterized.cc ) set(SCRIPTS diff --git a/samples/parameterized.cc b/samples/parameterized.cc new file mode 100644 index 00000000..3ae6c57c --- /dev/null +++ b/samples/parameterized.cc @@ -0,0 +1,75 @@ +#include <criterion/parameterized.h> + +// Basic usage + +ParameterizedTestParameters(params, str) { + static const char *strings[] = { + "foo", "bar", "baz" + }; + + return cr_make_param_array(const char *, strings, sizeof (strings) / sizeof (const char *)); +} + +ParameterizedTest(const char **str, params, str) { + cr_assert_fail("Parameter: %s", *str); +} + +// Multiple parameters must be coalesced in a single parameter + +struct parameter_tuple { + int i; + double d; +}; + +ParameterizedTestParameters(params, multiple) { + static struct parameter_tuple params[] = { + {1, 2}, + {3, 4}, + {5, 6}, + }; + + return cr_make_param_array(struct parameter_tuple, params, sizeof (params) / sizeof (struct parameter_tuple)); +} + +ParameterizedTest(struct parameter_tuple *tup, params, multiple) { + cr_assert_fail("Parameters: (%d, %f)", tup->i, tup->d); +} + +// Using dynamically generated parameters + +// you **MUST** use new_obj, new_arr, delete_obj, delete_arr instead of +// the new, new[], delete and delete[] operators (respectively) to allocate and +// deallocate dynamic memory in parameters, otherwise this will crash on +// Windows builds of the test. + +// the criterion::allocator<T> allocator may be used with STL containers to +// allocate objects with the functions described above. + +using criterion::new_obj; +using criterion::new_arr; +using criterion::delete_obj; +using criterion::delete_arr; + +struct parameter_tuple_dyn { + int i; + std::unique_ptr<double, decltype(criterion::free)> d; + + parameter_tuple_dyn() : i(0), d(nullptr, criterion::free) {} + parameter_tuple_dyn(int i, double *d) : i(i), d(d, criterion::free) {} +}; + +ParameterizedTestParameters(params, cleanup) { + static criterion::parameters<parameter_tuple_dyn> params; + + params.push_back(parameter_tuple_dyn(1, new_obj<double>(2))); + params.push_back(parameter_tuple_dyn(3, new_obj<double>(4))); + params.push_back(parameter_tuple_dyn(5, new_obj<double>(6))); + + // A criterion::parameters<T> can be returned in place of a + // criterion_test_params. + return params; +} + +ParameterizedTest(parameter_tuple_dyn *tup, params, cleanup) { + cr_assert_fail("Parameters: (%d, %f)", tup->i, *tup->d); +} From f44eb1760ecf7b0a824af2a8d2f637e77c9ec561 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 20:37:09 +0200 Subject: [PATCH 025/211] Added optional cleanup parameter to conversion function --- include/criterion/types.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/criterion/types.h b/include/criterion/types.h index d3dada34..8265b583 100644 --- a/include/criterion/types.h +++ b/include/criterion/types.h @@ -63,11 +63,12 @@ struct criterion_test_params { {} template <typename T> - constexpr criterion_test_params(std::vector<T, criterion::allocator<T>>& vec) + constexpr criterion_test_params(std::vector<T, criterion::allocator<T>>& vec, + void (*cleanup)(criterion_test_params *) = nullptr) : size(sizeof (T)) , params(&vec[0]) , length(vec.size()) - , cleanup(nullptr) + , cleanup(cleanup) {} # endif }; From 0b8680aac785c133000828646889d49be57db0fb Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 21:35:05 +0200 Subject: [PATCH 026/211] Added array-to-criterion_test_param conversion constructor --- include/criterion/types.h | 9 +++++++++ samples/parameterized.cc | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/criterion/types.h b/include/criterion/types.h index 8265b583..a28d833f 100644 --- a/include/criterion/types.h +++ b/include/criterion/types.h @@ -70,6 +70,15 @@ struct criterion_test_params { , length(vec.size()) , cleanup(cleanup) {} + + template <typename T, unsigned int N> + constexpr criterion_test_params(T (&arr)[N], + void (*cleanup)(criterion_test_params *) = nullptr) + : size(sizeof (arr[0])) + , params(static_cast<void*>(&arr)) + , length(N) + , cleanup(cleanup) + {} # endif }; diff --git a/samples/parameterized.cc b/samples/parameterized.cc index 3ae6c57c..e6aaff95 100644 --- a/samples/parameterized.cc +++ b/samples/parameterized.cc @@ -28,7 +28,7 @@ ParameterizedTestParameters(params, multiple) { {5, 6}, }; - return cr_make_param_array(struct parameter_tuple, params, sizeof (params) / sizeof (struct parameter_tuple)); + return criterion_test_params(params); } ParameterizedTest(struct parameter_tuple *tup, params, multiple) { From 2354ba6c78e02167cd949b6ea122ee64fe9d57ec Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 21:54:42 +0200 Subject: [PATCH 027/211] Fixed and completed documentation on parameterized tests --- doc/parameterized.rst | 67 +++++++++++++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 18 deletions(-) diff --git a/doc/parameterized.rst b/doc/parameterized.rst index 89f251e9..e6b033e0 100644 --- a/doc/parameterized.rst +++ b/doc/parameterized.rst @@ -18,7 +18,7 @@ and the parameter generator function: #include <criterion/parameterized.h> - ParameterizedTestParameter(suite_name, test_name) = { + ParameterizedTestParameters(suite_name, test_name) { void *params; size_t nb_params; @@ -54,17 +54,12 @@ easily use a struct to hold the context as a workaround: ... }; - ParameterizedTestParameter(suite_name, test_name) = { - size_t nb_params = 32; - struct my_params *params = cr_malloc(sizeof (struct my_params) * nb_params); - - // generate parameter set - - params[0] = ... - params[1] = ... - - ... + ParameterizedTestParameters(suite_name, test_name) { + struct my_params params[] = { + // parameter set + }; + size_t nb_params = sizeof (params) / sizeof (struct my_params); return cr_make_param_array(struct my_params, params, nb_params); } @@ -72,8 +67,20 @@ easily use a struct to hold the context as a workaround: // access param.param0, param.param1, ... } -Dynamically allocating fields -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +C++ users can also use a simpler syntax before returning an array of parameters: + +.. code-block:: c++ + + ParameterizedTestParameters(suite_name, test_name) { + struct my_params params[] = { + // parameter set + }; + + return criterion_test_params(params); + } + +Dynamically allocating parameters +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Any dynamic memory allocation done from a ParameterizedTestParameter function **must** be done with ``cr_malloc``, ``cr_calloc``, or ``cr_realloc``. @@ -100,6 +107,9 @@ use: ``criterion::new_arr``. The function possess the exact same semantics as ``delete[] array``. +Furthermore, the ``criterion::allocator<T>`` allocator can be used with STL +containers to allocate memory with the functions above. + Freeing dynamically allocated parameter fields ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -118,15 +128,36 @@ the cleanup function that should be called on the generated parameter context: cr_free(((struct my_params *) ctp->params)->some_int_ptr); } - ParameterizedTestParameter(suite_name, test_name) = { - static my_params param = { + ParameterizedTestParameters(suite_name, test_name) { + static my_params params[] = {{ .some_int_ptr = cr_malloc(sizeof (int)); - }; - *param.some_int_ptr = 42; + }}; + param[0].some_int_ptr = 42; - return cr_make_param_array(struct my_params, ¶m, 1, cleanup_params); + return cr_make_param_array(struct my_params, params, 1, cleanup_params); } +C++ users can use a more convenient approach: + +.. code-block:: c++ + + #include <criterion/parameterized.h> + + struct my_params { + std::unique_ptr<int, decltype(criterion::free)> some_int_ptr; + + my_params(int *ptr) : some_int_ptr(ptr, criterion::free) {} + }; + + ParameterizedTestParameters(suite_name, test_name) { + static criterion::parameters<my_params> params; + params.push_back(my_params(criterion::new_obj<int>(42))); + + return params; + } + +``criterion::parameters<T>`` is typedef'd as ``std::vector<T, criterion::allocator<T>>``. + Configuring parameterized tests ------------------------------- From 10a3cbb9883483d783401bfceebfdfc935fc8a0c Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 21:57:20 +0200 Subject: [PATCH 028/211] Conditionally disabled asprintf::invalid on some OSes --- test/asprintf.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/test/asprintf.c b/test/asprintf.c index dd191aa0..26405551 100644 --- a/test/asprintf.c +++ b/test/asprintf.c @@ -55,11 +55,16 @@ Theory((struct format_test *fmt), asprintf, valid) { free(actual); } -#if defined(__unix__) && defined(__GNUC__) -# pragma GCC diagnostic ignored "-Wformat" +#if defined(__linux__) || defined(__APPLE__) +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wformat" +# endif +# define ASPRINTF_INVALID_DISABLED 0 +#else +# define ASPRINTF_INVALID_DISABLED 1 +#endif -Test(asprintf, invalid) { +Test(asprintf, invalid, .disabled = ASPRINTF_INVALID_DISABLED) { char *actual; cr_expect_lt(cr_asprintf(&actual, "%"), 0); } -#endif From 665dd400594691f19680ec50910422c45ac18cd3 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 13:29:31 -0700 Subject: [PATCH 029/211] Fixed BSD & OSX get_processor_count implementation --- src/compat/processor.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/compat/processor.c b/src/compat/processor.c index ba7ab9fb..a41fe17c 100644 --- a/src/compat/processor.c +++ b/src/compat/processor.c @@ -31,20 +31,19 @@ size_t get_processor_count(void) { return (size_t) sysinfo.dwNumberOfProcessors; #elif defined(BSD) - int mib[2] = { CTL_HW, HW_AVAILCPU }; + int mib[2] = { CTL_HW, HW_NCPU }; + size_t miblen = 2; +# ifdef __APPLE__ + sysctlnametomib("hw.logicalcpu", mib, &miblen); +# endif + long long count = 0; size_t len = sizeof (count); - /* get the number of CPUs from the system */ int res = sysctl(mib, 2, &count, &len, NULL, 0); - if (count < 1 || res == -1) { - mib[1] = HW_NCPU; - res = sysctl(mib, 2, &count, &len, NULL, 0); - - if (count < 1 || res == -1) - count = 1; - } + if (count < 1 || res == -1) + count = 1; return (size_t) count; #elif defined(__linux__) return sysconf(_SC_NPROCESSORS_ONLN); From 013992d9cdfc03ae52f9843f6cad467e450ca5e9 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 13:30:08 -0700 Subject: [PATCH 030/211] Removed asprintf::invalid test --- test/asprintf.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/test/asprintf.c b/test/asprintf.c index 26405551..0fa34d92 100644 --- a/test/asprintf.c +++ b/test/asprintf.c @@ -54,17 +54,3 @@ Theory((struct format_test *fmt), asprintf, valid) { free(actual); } - -#if defined(__linux__) || defined(__APPLE__) -# ifdef __GNUC__ -# pragma GCC diagnostic ignored "-Wformat" -# endif -# define ASPRINTF_INVALID_DISABLED 0 -#else -# define ASPRINTF_INVALID_DISABLED 1 -#endif - -Test(asprintf, invalid, .disabled = ASPRINTF_INVALID_DISABLED) { - char *actual; - cr_expect_lt(cr_asprintf(&actual, "%"), 0); -} From 13760d0447abdc0fd0aec444ab0aecaf5cea74cd Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 23 Sep 2015 22:34:27 +0200 Subject: [PATCH 031/211] Fixed BSD unused warning --- src/compat/processor.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compat/processor.c b/src/compat/processor.c index a41fe17c..605f57ea 100644 --- a/src/compat/processor.c +++ b/src/compat/processor.c @@ -32,8 +32,8 @@ size_t get_processor_count(void) { return (size_t) sysinfo.dwNumberOfProcessors; #elif defined(BSD) int mib[2] = { CTL_HW, HW_NCPU }; - size_t miblen = 2; # ifdef __APPLE__ + size_t miblen = 2; sysctlnametomib("hw.logicalcpu", mib, &miblen); # endif From 461c56e8e93a86b756b42306f104673ff0ce89a0 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 24 Sep 2015 00:14:31 +0200 Subject: [PATCH 032/211] Removed deprecated 1.x unprefixed assertion macros --- include/criterion/assert.h | 62 -------------------------------------- 1 file changed, 62 deletions(-) diff --git a/include/criterion/assert.h b/include/criterion/assert.h index f29860ed..c09fa004 100644 --- a/include/criterion/assert.h +++ b/include/criterion/assert.h @@ -596,12 +596,6 @@ CR_END_C_API // It shall be removed in the next major version of Criterion # ifndef CRITERION_NO_COMPAT -# define CRITERION_ASSERT_DEPRECATED_(Name) CRITERION_ASSERT_DEPRECATED__( \ - message \ - ("The `" #Name "` macro is deprecated, " \ - "please use `cr_" #Name "` instead.") \ - ) - # define CRITERION_ASSERT_DEPRECATED_B(Name, Newname) \ CRITERION_ASSERT_DEPRECATED__( \ message \ @@ -617,16 +611,6 @@ CR_END_C_API _Pragma(#Msg) # endif -# ifndef assert -# define assert(...) CRITERION_ASSERT_DEPRECATED_(assert) cr_assert(__VA_ARGS__) - -// this is needed to make the POSIX assert.h redefine assert if -// subsequently included -# ifndef _ASSERT_H -# define _ASSERT_H 1 -# endif /* !_ASSERT_H */ -# endif /* !assert */ - // scheduled for removal after 2.0 # define cr_abort_test(Message) CRITERION_ASSERT_DEPRECATED_B(cr_abort_test, cr_assert_fail) cr_assert_fail(Message) # define cr_assert_strings_eq(...) CRITERION_ASSERT_DEPRECATED_B(cr_assert_strings_eq, cr_assert_str_eq) cr_assert_str_eq(__VA_ARGS__) @@ -642,52 +626,6 @@ CR_END_C_API # define cr_assert_arrays_eq_cmp(...) CRITERION_ASSERT_DEPRECATED_B(cr_assert_arrays_eq_cmp, cr_assert_arr_eq_cmp) cr_assert_arr_eq_cmp(__VA_ARGS__) # define cr_assert_arrays_neq_cmp(...) CRITERION_ASSERT_DEPRECATED_B(cr_assert_arrays_neq_cmp, cr_assert_arr_neq_cmp) cr_assert_arr_neq_cmp(__VA_ARGS__) -// scheduled for removal at 2.0 -# define abort_test(Message) CRITERION_ASSERT_DEPRECATED_(abort_test) cr_abort_test(Message) -# define expect(...) CRITERION_ASSERT_DEPRECATED_(expect) cr_expect(__VA_ARGS__) -# define assert_not(...) CRITERION_ASSERT_DEPRECATED_(assert_not) cr_assert_not(__VA_ARGS__) -# define expect_not(...) CRITERION_ASSERT_DEPRECATED_(expect_not) cr_expect_not(__VA_ARGS__) -# define assert_eq(...) CRITERION_ASSERT_DEPRECATED_(assert_eq) cr_assert_eq(__VA_ARGS__) -# define expect_eq(...) CRITERION_ASSERT_DEPRECATED_(expect_eq) cr_expect_eq(__VA_ARGS__) -# define assert_neq(...) CRITERION_ASSERT_DEPRECATED_(assert_neq) cr_assert_neq(__VA_ARGS__) -# define expect_neq(...) CRITERION_ASSERT_DEPRECATED_(expect_neq) cr_expect_neq(__VA_ARGS__) -# define assert_lt(...) CRITERION_ASSERT_DEPRECATED_(assert_lt) cr_assert_lt(__VA_ARGS__) -# define expect_lt(...) CRITERION_ASSERT_DEPRECATED_(expect_lt) cr_expect_lt(__VA_ARGS__) -# define assert_gt(...) CRITERION_ASSERT_DEPRECATED_(assert_gt) cr_assert_gt(__VA_ARGS__) -# define expect_gt(...) CRITERION_ASSERT_DEPRECATED_(expect_gt) cr_expect_gt(__VA_ARGS__) -# define assert_leq(...) CRITERION_ASSERT_DEPRECATED_(assert_leq) cr_assert_leq(__VA_ARGS__) -# define expect_leq(...) CRITERION_ASSERT_DEPRECATED_(expect_leq) cr_expect_leq(__VA_ARGS__) -# define assert_geq(...) CRITERION_ASSERT_DEPRECATED_(assert_geq) cr_assert_geq(__VA_ARGS__) -# define expect_geq(...) CRITERION_ASSERT_DEPRECATED_(expect_geq) cr_expect_geq(__VA_ARGS__) -# define assert_null(...) CRITERION_ASSERT_DEPRECATED_(assert_null) cr_assert_null(__VA_ARGS__) -# define expect_null(...) CRITERION_ASSERT_DEPRECATED_(expect_null) cr_expect_null(__VA_ARGS__) -# define assert_not_null(...) CRITERION_ASSERT_DEPRECATED_(assert_not_null) cr_assert_not_null(__VA_ARGS__) -# define expect_not_null(...) CRITERION_ASSERT_DEPRECATED_(expect_not_null) cr_expect_not_null(__VA_ARGS__) -# define assert_float_eq(...) CRITERION_ASSERT_DEPRECATED_(assert_float_eq) cr_assert_float_eq(__VA_ARGS__) -# define expect_float_eq(...) CRITERION_ASSERT_DEPRECATED_(expect_float_eq) cr_expect_float_eq(__VA_ARGS__) -# define assert_float_neq(...) CRITERION_ASSERT_DEPRECATED_(assert_float_neq) cr_assert_float_neq(__VA_ARGS__) -# define expect_float_neq(...) CRITERION_ASSERT_DEPRECATED_(expect_float_neq) cr_expect_float_neq(__VA_ARGS__) -# define assert_strings_eq(...) CRITERION_ASSERT_DEPRECATED_(assert_strings_eq) cr_assert_strings_eq(__VA_ARGS__) -# define expect_strings_eq(...) CRITERION_ASSERT_DEPRECATED_(expect_strings_eq) cr_expect_strings_eq(__VA_ARGS__) -# define assert_strings_neq(...) CRITERION_ASSERT_DEPRECATED_(assert_strings_neq) cr_assert_strings_neq(__VA_ARGS__) -# define expect_strings_neq(...) CRITERION_ASSERT_DEPRECATED_(expect_strings_neq) cr_expect_strings_neq(__VA_ARGS__) -# define assert_strings_gt(...) CRITERION_ASSERT_DEPRECATED_(assert_strings_gt) cr_assert_strings_gt(__VA_ARGS__) -# define expect_strings_gt(...) CRITERION_ASSERT_DEPRECATED_(expect_strings_gt) cr_expect_strings_gt(__VA_ARGS__) -# define assert_strings_lt(...) CRITERION_ASSERT_DEPRECATED_(assert_strings_lt) cr_assert_strings_lt(__VA_ARGS__) -# define expect_strings_lt(...) CRITERION_ASSERT_DEPRECATED_(expect_strings_lt) cr_expect_strings_lt(__VA_ARGS__) -# define assert_strings_leq(...) CRITERION_ASSERT_DEPRECATED_(assert_strings_leq) cr_assert_strings_leq(__VA_ARGS__) -# define expect_strings_leq(...) CRITERION_ASSERT_DEPRECATED_(expect_strings_leq) cr_expect_strings_leq(__VA_ARGS__) -# define assert_strings_geq(...) CRITERION_ASSERT_DEPRECATED_(assert_strings_geq) cr_assert_strings_geq(__VA_ARGS__) -# define expect_strings_geq(...) CRITERION_ASSERT_DEPRECATED_(expect_strings_geq) cr_expect_strings_geq(__VA_ARGS__) -# define assert_arrays_eq(...) CRITERION_ASSERT_DEPRECATED_(assert_arrays_eq) cr_assert_arrays_eq(__VA_ARGS__) -# define expect_arrays_eq(...) CRITERION_ASSERT_DEPRECATED_(expect_arrays_eq) cr_expect_arrays_eq(__VA_ARGS__) -# define assert_arrays_neq(...) CRITERION_ASSERT_DEPRECATED_(assert_arrays_neq) cr_assert_arrays_neq(__VA_ARGS__) -# define expect_arrays_neq(...) CRITERION_ASSERT_DEPRECATED_(expect_arrays_neq) cr_expect_arrays_neq(__VA_ARGS__) -# define assert_arrays_eq_cmp(...) CRITERION_ASSERT_DEPRECATED_(assert_arrays_eq_cmp) cr_assert_arrays_eq_cmp(__VA_ARGS__) -# define expect_arrays_eq_cmp(...) CRITERION_ASSERT_DEPRECATED_(expect_arrays_eq_cmp) cr_expect_arrays_eq_cmp(__VA_ARGS__) -# define assert_arrays_neq_cmp(...) CRITERION_ASSERT_DEPRECATED_(assert_arrays_neq_cmp) cr_assert_arrays_neq_cmp(__VA_ARGS__) -# define expect_arrays_neq_cmp(...) CRITERION_ASSERT_DEPRECATED_(expect_arrays_neq_cmp) cr_expect_arrays_neq_cmp(__VA_ARGS__) - # endif #endif /* !CRITERION_ASSERT_H_ */ From 5ec278c7d6ac32b8585bca99ddf69484fa1da2f5 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 24 Sep 2015 01:14:16 +0200 Subject: [PATCH 033/211] Fixed memory leaks --- src/core/runner.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/runner.c b/src/core/runner.c index abb25c96..6ac37114 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -412,9 +412,13 @@ static struct worker *run_next_test(struct criterion_test_set *p_set, ctx->test_stats, ¶m); + sfree(ctx->test_stats); + if (!is_runner()) { sfree(ctx->suite_stats); - sfree(ctx->test_stats); + if (ctx->params.cleanup) + ctx->params.cleanup(&ctx->params); + ccrReturn(NULL); } else { ccrReturn(worker); @@ -514,6 +518,8 @@ static void run_tests_async(struct criterion_test_set *set, cleanup: fclose(event_pipe); sfree(ev); + for (size_t i = 0; i < nb_workers; ++i) + sfree(workers.workers[i]); free(workers.workers); ccrAbort(ctx); } From b347b70bdb004ef4182c021311b97b4199becf63 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 24 Sep 2015 16:08:58 +0200 Subject: [PATCH 034/211] Refactored runner coroutine into its own file --- CMakeLists.txt | 2 + src/core/coroutine.h | 15 ++- src/core/report.h | 1 + src/core/runner.c | 148 +----------------------------- src/core/runner.h | 1 + src/core/runner_coroutine.c | 178 ++++++++++++++++++++++++++++++++++++ src/core/runner_coroutine.h | 33 +++++++ 7 files changed, 229 insertions(+), 149 deletions(-) create mode 100644 src/core/runner_coroutine.c create mode 100644 src/core/runner_coroutine.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a51244a..063037c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,6 +83,8 @@ set(SOURCE_FILES src/core/report.h src/core/runner.c src/core/runner.h + src/core/runner_coroutine.c + src/core/runner_coroutine.h src/core/worker.c src/core/worker.h src/core/stats.c diff --git a/src/core/coroutine.h b/src/core/coroutine.h index a8fad9b8..badea854 100644 --- a/src/core/coroutine.h +++ b/src/core/coroutine.h @@ -153,8 +153,15 @@ #define ccrContParam void **ccrParam -#define ccrBeginContext struct ccrContextTag { int ccrLine -#define ccrEndContext(x) } *x = (struct ccrContextTag *)*ccrParam +#define ccrBeginContext typedef struct { int ccrLine +#define ccrEndContext(x) } ccrContextTag; ccrContextTag *x = (ccrContextTag *)*ccrParam + +#define ccrUseNamedContext(Name, x) \ + typedef struct Name ccrContextTag; \ + ccrContextTag *x = (ccrContextTag *)*ccrParam + +#define ccrBeginDefineContextType(Name) struct Name { int ccrLine +#define ccrEndDefineContextType } #define ccrBegin(x) if(!x) {x= *ccrParam=malloc(sizeof(*x)); x->ccrLine=0;}\ if (x) switch(x->ccrLine) { case 0:; @@ -163,12 +170,12 @@ #define ccrReturn(z) \ do {\ - ((struct ccrContextTag *)*ccrParam)->ccrLine=__LINE__;\ + ((ccrContextTag *)*ccrParam)->ccrLine=__LINE__;\ return (z); case __LINE__:;\ } while (0) #define ccrReturnV \ do {\ - ((struct ccrContextTag *)*ccrParam)->ccrLine=__LINE__;\ + ((ccrContextTag *)*ccrParam)->ccrLine=__LINE__;\ return; case __LINE__:;\ } while (0) diff --git a/src/core/report.h b/src/core/report.h index bc2d166e..bdcffac5 100644 --- a/src/core/report.h +++ b/src/core/report.h @@ -25,6 +25,7 @@ # define REPORT_H_ # include "criterion/hooks.h" +# include "criterion/options.h" # define report(Kind, Data) call_report_hooks_##Kind(Data) diff --git a/src/core/runner.c b/src/core/runner.c index 6ac37114..ea1a7fec 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -33,6 +33,7 @@ #include "compat/processor.h" #include "string/i18n.h" #include "io/event.h" +#include "runner_coroutine.h" #include "stats.h" #include "runner.h" #include "report.h" @@ -40,7 +41,6 @@ #include "abort.h" #include "config.h" #include "common.h" -#include "coroutine.h" #ifdef HAVE_PCRE #include "string/extmatch.h" @@ -132,8 +132,8 @@ struct criterion_test_set *criterion_init(void) { return set; } -static void run_test_child(struct criterion_test *test, - struct criterion_suite *suite) { +void run_test_child(struct criterion_test *test, + struct criterion_suite *suite) { if (suite->data && suite->data->timeout != 0 && test->data->timeout == 0) setup_timeout((uint64_t) (suite->data->timeout * 1e9)); @@ -170,12 +170,6 @@ static void run_test_child(struct criterion_test *test, send_event(POST_FINI, NULL, 0); } -static INLINE bool is_disabled(struct criterion_test *t, - struct criterion_suite *s) { - - return t->data->disabled || (s->data && s->data->disabled); -} - #define push_event(Kind, ...) \ do { \ stat_push_event(ctx->stats, \ @@ -295,23 +289,6 @@ static void handle_event(struct event *ev) { } } -static struct worker *run_test(struct criterion_global_stats *stats, - struct criterion_suite_stats *suite_stats, - struct criterion_test_stats *test_stats, - struct test_single_param *param) { - - struct execution_context ctx = { - .stats = sref(stats), - .test = test_stats->test, - .test_stats = sref(test_stats), - .suite = suite_stats->suite, - .suite_stats = sref(suite_stats), - .param = param, - }; - return spawn_test_worker(&ctx, run_test_child, g_worker_pipe); - -} - #ifdef HAVE_PCRE void disable_unmatching(struct criterion_test_set *set) { FOREACH_SET(struct criterion_suite_set *s, set->suites) { @@ -345,125 +322,6 @@ void criterion_finalize(struct criterion_test_set *set) { sfree(set); } -static struct worker *run_next_test(struct criterion_test_set *p_set, - struct criterion_global_stats *p_stats, - ccrContParam) { - ccrBeginContext; - struct criterion_suite_set *suite_set; - struct criterion_test *test; - struct criterion_suite_stats *suite_stats; - struct criterion_test_stats *test_stats; - struct criterion_test_set *set; - struct criterion_global_stats *stats; - struct criterion_test_params params; - - struct criterion_ordered_set_node *ns; - struct criterion_ordered_set_node *nt; - size_t i; - ccrEndContext(ctx); - - ccrBegin(ctx); - - ctx->set = p_set; - ctx->stats = p_stats; - ccrReturn(NULL); - - for (ctx->ns = ctx->set->suites->first; ctx->ns; ctx->ns = ctx->ns->next) { - ctx->suite_set = (void*) ctx->ns->data; - - if (!ctx->suite_set->tests) - continue; - - report(PRE_SUITE, ctx->suite_set); - log(pre_suite, ctx->suite_set); - - ctx->suite_stats = suite_stats_init(&ctx->suite_set->suite); - - struct event ev = { .kind = PRE_SUITE }; - stat_push_event(ctx->stats, ctx->suite_stats, NULL, &ev); - - for (ctx->nt = ctx->suite_set->tests->first; ctx->nt; ctx->nt = ctx->nt->next) { - ctx->test = (void*) ctx->nt->data; - - if (ctx->test->data->kind_ == CR_TEST_PARAMETERIZED - && ctx->test->data->param_) { - - if (is_disabled(ctx->test, ctx->suite_stats->suite)) { - ctx->test_stats = test_stats_init(ctx->test); - stat_push_event(ctx->stats, - ctx->suite_stats, - ctx->test_stats, - &(struct event) { .kind = PRE_INIT }); - sfree(ctx->test_stats); - continue; - } - - ctx->params = ctx->test->data->param_(); - for (ctx->i = 0; ctx->i < ctx->params.length; ++ctx->i) { - ctx->test_stats = test_stats_init(ctx->test); - - struct test_single_param param = { - ctx->params.size, - (char *) ctx->params.params + ctx->i * ctx->params.size - }; - - struct worker *worker = run_test(ctx->stats, - ctx->suite_stats, - ctx->test_stats, - ¶m); - - sfree(ctx->test_stats); - - if (!is_runner()) { - sfree(ctx->suite_stats); - if (ctx->params.cleanup) - ctx->params.cleanup(&ctx->params); - - ccrReturn(NULL); - } else { - ccrReturn(worker); - } - } - - if (ctx->params.cleanup) - ctx->params.cleanup(&ctx->params); - } else { - ctx->test_stats = test_stats_init(ctx->test); - - if (is_disabled(ctx->test, ctx->suite_stats->suite)) { - stat_push_event(ctx->stats, - ctx->suite_stats, - ctx->test_stats, - &(struct event) { .kind = PRE_INIT }); - sfree(ctx->test_stats); - continue; - } - - struct worker *worker = run_test(ctx->stats, - ctx->suite_stats, - ctx->test_stats, - NULL); - - sfree(ctx->test_stats); - - if (!is_runner()) { - sfree(ctx->suite_stats); - ccrReturn(NULL); - } else { - ccrReturn(worker); - } - } - } - - report(POST_SUITE, ctx->suite_stats); - log(post_suite, ctx->suite_stats); - - sfree(ctx->suite_stats); - } - - ccrFinish(NULL); -} - static void run_tests_async(struct criterion_test_set *set, struct criterion_global_stats *stats) { diff --git a/src/core/runner.h b/src/core/runner.h index 9ddb57f4..9b498393 100644 --- a/src/core/runner.h +++ b/src/core/runner.h @@ -31,6 +31,7 @@ DECL_SECTION_LIMITS(struct criterion_test*, cr_tst); DECL_SECTION_LIMITS(struct criterion_suite*, cr_sts); struct criterion_test_set *criterion_init(void); +void run_test_child(struct criterion_test *test, struct criterion_suite *suite); # define FOREACH_TEST_SEC(Test) \ for (struct criterion_test **Test = GET_SECTION_START(cr_tst); \ diff --git a/src/core/runner_coroutine.c b/src/core/runner_coroutine.c new file mode 100644 index 00000000..31a271c2 --- /dev/null +++ b/src/core/runner_coroutine.c @@ -0,0 +1,178 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#include <stdlib.h> +#include <stdio.h> +#include <csptr/smalloc.h> +#include "criterion/logging.h" +#include "runner_coroutine.h" +#include "worker.h" +#include "stats.h" +#include "runner.h" +#include "report.h" + +static INLINE void nothing(void) {} + +ccrBeginDefineContextType(run_next_context); + + struct criterion_suite_set *suite_set; + struct criterion_test *test; + struct criterion_suite_stats *suite_stats; + struct criterion_test_stats *test_stats; + struct criterion_test_set *set; + struct criterion_global_stats *stats; + struct criterion_test_params params; + + struct criterion_ordered_set_node *ns; + struct criterion_ordered_set_node *nt; + size_t i; + +ccrEndDefineContextType; + +static struct worker *run_test(struct criterion_global_stats *stats, + struct criterion_suite_stats *suite_stats, + struct criterion_test_stats *test_stats, + struct test_single_param *param) { + + struct execution_context ctx = { + .stats = sref(stats), + .test = test_stats->test, + .test_stats = sref(test_stats), + .suite = suite_stats->suite, + .suite_stats = sref(suite_stats), + .param = param, + }; + return spawn_test_worker(&ctx, run_test_child, g_worker_pipe); +} + +static INLINE bool is_disabled(struct criterion_test *t, + struct criterion_suite *s) { + + return t->data->disabled || (s->data && s->data->disabled); +} + + +static struct worker *cleanup_and_return_worker(struct run_next_context *ctx, + struct worker *worker) { + + sfree(ctx->test_stats); + if (!is_runner()) { + worker = NULL; + sfree(ctx->suite_stats); + if (ctx->test->data->kind_ == CR_TEST_PARAMETERIZED + && ctx->params.cleanup) + ctx->params.cleanup(&ctx->params); + } + return worker; +} + +static int skip_disabled(struct run_next_context *ctx) { + if (is_disabled(ctx->test, ctx->suite_stats->suite)) { + ctx->test_stats = test_stats_init(ctx->test); + stat_push_event(ctx->stats, + ctx->suite_stats, + ctx->test_stats, + &(struct event) { .kind = PRE_INIT }); + sfree(ctx->test_stats); + return 1; + } + return 0; +} + +struct worker *run_next_test(struct criterion_test_set *p_set, + struct criterion_global_stats *p_stats, + ccrContParam) { + + ccrUseNamedContext(run_next_context, ctx); + + ccrBegin(ctx); + + ctx->set = p_set; + ctx->stats = p_stats; + ccrReturn(NULL); + + for (ctx->ns = ctx->set->suites->first; ctx->ns; ctx->ns = ctx->ns->next) { + ctx->suite_set = (void*) ctx->ns->data; + + if (!ctx->suite_set->tests) + continue; + + report(PRE_SUITE, ctx->suite_set); + log(pre_suite, ctx->suite_set); + + ctx->suite_stats = suite_stats_init(&ctx->suite_set->suite); + + struct event ev = { .kind = PRE_SUITE }; + stat_push_event(ctx->stats, ctx->suite_stats, NULL, &ev); + + for (ctx->nt = ctx->suite_set->tests->first; ctx->nt; ctx->nt = ctx->nt->next) { + ctx->test = (void*) ctx->nt->data; + + if (ctx->test->data->kind_ == CR_TEST_PARAMETERIZED + && ctx->test->data->param_) { + + if (skip_disabled(ctx)) + continue; + + ctx->params = ctx->test->data->param_(); + for (ctx->i = 0; ctx->i < ctx->params.length; ++ctx->i) { + ctx->test_stats = test_stats_init(ctx->test); + + struct test_single_param param = { + ctx->params.size, + (char *) ctx->params.params + ctx->i * ctx->params.size + }; + + struct worker *worker = run_test(ctx->stats, + ctx->suite_stats, + ctx->test_stats, + ¶m); + + ccrReturn(cleanup_and_return_worker(ctx, worker)); + } + + if (ctx->params.cleanup) + ctx->params.cleanup(&ctx->params); + } else { + ctx->test_stats = test_stats_init(ctx->test); + + if (skip_disabled(ctx)) + continue; + + struct worker *worker = run_test(ctx->stats, + ctx->suite_stats, + ctx->test_stats, + NULL); + + ccrReturn(cleanup_and_return_worker(ctx, worker)); + } + } + + report(POST_SUITE, ctx->suite_stats); + log(post_suite, ctx->suite_stats); + + sfree(ctx->suite_stats); + } + + ccrFinish(NULL); +} diff --git a/src/core/runner_coroutine.h b/src/core/runner_coroutine.h new file mode 100644 index 00000000..0b8773a3 --- /dev/null +++ b/src/core/runner_coroutine.h @@ -0,0 +1,33 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef RUNNER_COROUTINE_H_ +# define RUNNER_COROUTINE_H_ + +# include "coroutine.h" + +struct worker *run_next_test(struct criterion_test_set *p_set, + struct criterion_global_stats *p_stats, + ccrContParam); + +#endif /* !RUNNER_COROUTINE_H_ */ From 8db5def5e37ae61e47075bc81b29c10609bee268 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 25 Sep 2015 14:10:58 +0200 Subject: [PATCH 035/211] [Issue #56] Updated screencast --- doc/screencast.gif | Bin 1442426 -> 1388328 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/screencast.gif b/doc/screencast.gif index b8289416f4dac87280173f516e9553f906317037..8b61b503f1e3334ac994b4c09f6d112348fb8d52 100644 GIT binary patch literal 1388328 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%0AOLgG)_0qkNJwJV^j>EeETei%gOiciu z5xy_}{PY_z?&)*;sB&VEtdExI^Amug5A7IrkT#vtH1<5)xjN;eD_l2kP6c7VjLN6L zCyPvu%=k30Y}b1)&&3~u*K!`KY=7V6a>OLB^;n1_S6++ZyA1g0LQHfVT)NrgoM@c3 zbH%hhi6N%#vl(E4(&ytwF>Rk>!<Kf08Ng4sqL>K1oghM!!1Nk}5+h_igxRQQA9Oy8 z{Enq#Dw(%8@Qa@w%0{QKLHsyQ2+ObtO-vTD$bC9v&vv>eIhuubCEK4~+W?yjIj+lw z{VqwcFxrG|@vus!{{tp83w$qbH@_zSy$~~0VLg3#lRlir3HE&yjJ67~$qcsDhnJf| z*WeI>tAB-nIku+A{p}r>?Hq5kNig#H(LMngXmfiVt-2w~4LVjLll`ZvH#!AzrYLN+ z%`r63UvdM5B09=i80t|+di=;K#x$�saU2*y|q$L_QVB>G5nIeRw56?IJ?6C?u@T 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%0D@wPQi$K^6hc1H^0psh3k5h~o)uUxCo)%*mj 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	~SS|#WL;zrr8IavzHYJA0XX9Ij6!EcpX>JVkwT} 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⋙aY+LeTsz?+d51-$nFdRG+` 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%0D~kSR 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'U=V;!$|Kz4|O!fk=+*`<HVys;`B;_S!CCW4* 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 F^M9?VWV!$V literal 1442426 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.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⪪&ja_tHk{XR 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�O-D!@w3UtO9s~qqKn$IL> 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%0DaxA$CItjMHSiBfKjZ@Fylg& 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�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�vL!4 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 z	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�`7r`>%Y>5UP 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 U6%-W|6%-W|6%>{Kqo{cN4<Q2iK>z>% From 2b9f14041c1e0ea2022524f1a0d95883d1293681 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 26 Sep 2015 00:22:21 +0200 Subject: [PATCH 036/211] Added sane option defaults when running valgrind --- CMakeLists.txt | 1 + .../valgrind/include/valgrind/valgrind.h | 6587 +++++++++++++++++ po/POTFILES.in | 1 + po/fr.po | 24 +- src/core/runner.c | 37 + src/entry/main.c | 39 +- 6 files changed, 6677 insertions(+), 12 deletions(-) create mode 100644 dependencies/valgrind/include/valgrind/valgrind.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 063037c2..d3c65a70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ include_directories( /usr/local/include/ dependencies/libcsptr/include/ dependencies/dyncall/dyncall/ + dependencies/valgrind/include/ ) if (MSVC) diff --git a/dependencies/valgrind/include/valgrind/valgrind.h b/dependencies/valgrind/include/valgrind/valgrind.h new file mode 100644 index 00000000..6954d751 --- /dev/null +++ b/dependencies/valgrind/include/valgrind/valgrind.h @@ -0,0 +1,6587 @@ +/* -*- c -*- + ---------------------------------------------------------------- + + Notice that the following BSD-style license applies to this one + file (valgrind.h) only. The rest of Valgrind is licensed under the + terms of the GNU General Public License, version 2, unless + otherwise indicated. See the COPYING file in the source + distribution for details. + + ---------------------------------------------------------------- + + This file is part of Valgrind, a dynamic binary instrumentation + framework. + + Copyright (C) 2000-2013 Julian Seward. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ---------------------------------------------------------------- + + Notice that the above BSD-style license applies to this one file + (valgrind.h) only. The entire rest of Valgrind is licensed under + the terms of the GNU General Public License, version 2. See the + COPYING file in the source distribution for details. + + ---------------------------------------------------------------- +*/ + + +/* This file is for inclusion into client (your!) code. + + You can use these macros to manipulate and query Valgrind's + execution inside your own programs. + + The resulting executables will still run without Valgrind, just a + little bit more slowly than they otherwise would, but otherwise + unchanged. When not running on valgrind, each client request + consumes very few (eg. 7) instructions, so the resulting performance + loss is negligible unless you plan to execute client requests + millions of times per second. Nevertheless, if that is still a + problem, you can compile with the NVALGRIND symbol defined (gcc + -DNVALGRIND) so that client requests are not even compiled in. */ + +#ifndef __VALGRIND_H +#define __VALGRIND_H + + +/* ------------------------------------------------------------------ */ +/* VERSION NUMBER OF VALGRIND */ +/* ------------------------------------------------------------------ */ + +/* Specify Valgrind's version number, so that user code can + conditionally compile based on our version number. Note that these + were introduced at version 3.6 and so do not exist in version 3.5 + or earlier. The recommended way to use them to check for "version + X.Y or later" is (eg) + +#if defined(__VALGRIND_MAJOR__) && defined(__VALGRIND_MINOR__) \ + && (__VALGRIND_MAJOR__ > 3 \ + || (__VALGRIND_MAJOR__ == 3 && __VALGRIND_MINOR__ >= 6)) +*/ +#define __VALGRIND_MAJOR__ 3 +#define __VALGRIND_MINOR__ 10 + + +#include <stdarg.h> + +/* Nb: this file might be included in a file compiled with -ansi. So + we can't use C++ style "//" comments nor the "asm" keyword (instead + use "__asm__"). */ + +/* Derive some tags indicating what the target platform is. Note + that in this file we're using the compiler's CPP symbols for + identifying architectures, which are different to the ones we use + within the rest of Valgrind. Note, __powerpc__ is active for both + 32 and 64-bit PPC, whereas __powerpc64__ is only active for the + latter (on Linux, that is). + + Misc note: how to find out what's predefined in gcc by default: + gcc -Wp,-dM somefile.c +*/ +#undef PLAT_x86_darwin +#undef PLAT_amd64_darwin +#undef PLAT_x86_win32 +#undef PLAT_amd64_win64 +#undef PLAT_x86_linux +#undef PLAT_amd64_linux +#undef PLAT_ppc32_linux +#undef PLAT_ppc64be_linux +#undef PLAT_ppc64le_linux +#undef PLAT_arm_linux +#undef PLAT_arm64_linux +#undef PLAT_s390x_linux +#undef PLAT_mips32_linux +#undef PLAT_mips64_linux + + +#if defined(__APPLE__) && defined(__i386__) +# define PLAT_x86_darwin 1 +#elif defined(__APPLE__) && defined(__x86_64__) +# define PLAT_amd64_darwin 1 +#elif (defined(__MINGW32__) && !defined(__MINGW64__)) \ + || defined(__CYGWIN32__) \ + || (defined(_WIN32) && defined(_M_IX86)) +# define PLAT_x86_win32 1 +#elif defined(__MINGW64__) \ + || (defined(_WIN64) && defined(_M_X64)) +# define PLAT_amd64_win64 1 +#elif defined(__linux__) && defined(__i386__) +# define PLAT_x86_linux 1 +#elif defined(__linux__) && defined(__x86_64__) +# define PLAT_amd64_linux 1 +#elif defined(__linux__) && defined(__powerpc__) && !defined(__powerpc64__) +# define PLAT_ppc32_linux 1 +#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && _CALL_ELF != 2 +/* Big Endian uses ELF version 1 */ +# define PLAT_ppc64be_linux 1 +#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && _CALL_ELF == 2 +/* Little Endian uses ELF version 2 */ +# define PLAT_ppc64le_linux 1 +#elif defined(__linux__) && defined(__arm__) && !defined(__aarch64__) +# define PLAT_arm_linux 1 +#elif defined(__linux__) && defined(__aarch64__) && !defined(__arm__) +# define PLAT_arm64_linux 1 +#elif defined(__linux__) && defined(__s390__) && defined(__s390x__) +# define PLAT_s390x_linux 1 +#elif defined(__linux__) && defined(__mips__) && (__mips==64) +# define PLAT_mips64_linux 1 +#elif defined(__linux__) && defined(__mips__) && (__mips!=64) +# define PLAT_mips32_linux 1 +#else +/* If we're not compiling for our target platform, don't generate + any inline asms. */ +# if !defined(NVALGRIND) +# define NVALGRIND 1 +# endif +#endif + + +/* ------------------------------------------------------------------ */ +/* ARCHITECTURE SPECIFICS for SPECIAL INSTRUCTIONS. There is nothing */ +/* in here of use to end-users -- skip to the next section. */ +/* ------------------------------------------------------------------ */ + +/* + * VALGRIND_DO_CLIENT_REQUEST(): a statement that invokes a Valgrind client + * request. Accepts both pointers and integers as arguments. + * + * VALGRIND_DO_CLIENT_REQUEST_STMT(): a statement that invokes a Valgrind + * client request that does not return a value. + + * VALGRIND_DO_CLIENT_REQUEST_EXPR(): a C expression that invokes a Valgrind + * client request and whose value equals the client request result. Accepts + * both pointers and integers as arguments. Note that such calls are not + * necessarily pure functions -- they may have side effects. + */ + +#define VALGRIND_DO_CLIENT_REQUEST(_zzq_rlval, _zzq_default, \ + _zzq_request, _zzq_arg1, _zzq_arg2, \ + _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + do { (_zzq_rlval) = VALGRIND_DO_CLIENT_REQUEST_EXPR((_zzq_default), \ + (_zzq_request), (_zzq_arg1), (_zzq_arg2), \ + (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0) + +#define VALGRIND_DO_CLIENT_REQUEST_STMT(_zzq_request, _zzq_arg1, \ + _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ + (_zzq_request), (_zzq_arg1), (_zzq_arg2), \ + (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0) + +#if defined(NVALGRIND) + +/* Define NVALGRIND to completely remove the Valgrind magic sequence + from the compiled code (analogous to NDEBUG's effects on + assert()) */ +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + (_zzq_default) + +#else /* ! NVALGRIND */ + +/* The following defines the magic code sequences which the JITter + spots and handles magically. Don't look too closely at them as + they will rot your brain. + + The assembly code sequences for all architectures is in this one + file. This is because this file must be stand-alone, and we don't + want to have multiple files. + + For VALGRIND_DO_CLIENT_REQUEST, we must ensure that the default + value gets put in the return slot, so that everything works when + this is executed not under Valgrind. Args are passed in a memory + block, and so there's no intrinsic limit to the number that could + be passed, but it's currently five. + + The macro args are: + _zzq_rlval result lvalue + _zzq_default default value (result returned when running on real CPU) + _zzq_request request code + _zzq_arg1..5 request params + + The other two macros are used to support function wrapping, and are + a lot simpler. VALGRIND_GET_NR_CONTEXT returns the value of the + guest's NRADDR pseudo-register and whatever other information is + needed to safely run the call original from the wrapper: on + ppc64-linux, the R2 value at the divert point is also needed. This + information is abstracted into a user-visible type, OrigFn. + + VALGRIND_CALL_NOREDIR_* behaves the same as the following on the + guest, but guarantees that the branch instruction will not be + redirected: x86: call *%eax, amd64: call *%rax, ppc32/ppc64: + branch-and-link-to-r11. VALGRIND_CALL_NOREDIR is just text, not a + complete inline asm, since it needs to be combined with more magic + inline asm stuff to be useful. +*/ + +/* ------------------------- x86-{linux,darwin} ---------------- */ + +#if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) \ + || (defined(PLAT_x86_win32) && defined(__GNUC__)) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "roll $3, %%edi ; roll $13, %%edi\n\t" \ + "roll $29, %%edi ; roll $19, %%edi\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + __extension__ \ + ({volatile unsigned int _zzq_args[6]; \ + volatile unsigned int _zzq_result; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %EDX = client_request ( %EAX ) */ \ + "xchgl %%ebx,%%ebx" \ + : "=d" (_zzq_result) \ + : "a" (&_zzq_args[0]), "0" (_zzq_default) \ + : "cc", "memory" \ + ); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %EAX = guest_NRADDR */ \ + "xchgl %%ecx,%%ecx" \ + : "=a" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_EAX \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir *%EAX */ \ + "xchgl %%edx,%%edx\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "xchgl %%edi,%%edi\n\t" \ + : : : "cc", "memory" \ + ); \ + } while (0) + +#endif /* PLAT_x86_linux || PLAT_x86_darwin || (PLAT_x86_win32 && __GNUC__) */ + +/* ------------------------- x86-Win32 ------------------------- */ + +#if defined(PLAT_x86_win32) && !defined(__GNUC__) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#if defined(_MSC_VER) + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + __asm rol edi, 3 __asm rol edi, 13 \ + __asm rol edi, 29 __asm rol edi, 19 + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + valgrind_do_client_request_expr((uintptr_t)(_zzq_default), \ + (uintptr_t)(_zzq_request), (uintptr_t)(_zzq_arg1), \ + (uintptr_t)(_zzq_arg2), (uintptr_t)(_zzq_arg3), \ + (uintptr_t)(_zzq_arg4), (uintptr_t)(_zzq_arg5)) + +static __inline uintptr_t +valgrind_do_client_request_expr(uintptr_t _zzq_default, uintptr_t _zzq_request, + uintptr_t _zzq_arg1, uintptr_t _zzq_arg2, + uintptr_t _zzq_arg3, uintptr_t _zzq_arg4, + uintptr_t _zzq_arg5) +{ + volatile uintptr_t _zzq_args[6]; + volatile unsigned int _zzq_result; + _zzq_args[0] = (uintptr_t)(_zzq_request); + _zzq_args[1] = (uintptr_t)(_zzq_arg1); + _zzq_args[2] = (uintptr_t)(_zzq_arg2); + _zzq_args[3] = (uintptr_t)(_zzq_arg3); + _zzq_args[4] = (uintptr_t)(_zzq_arg4); + _zzq_args[5] = (uintptr_t)(_zzq_arg5); + __asm { __asm lea eax, _zzq_args __asm mov edx, _zzq_default + __SPECIAL_INSTRUCTION_PREAMBLE + /* %EDX = client_request ( %EAX ) */ + __asm xchg ebx,ebx + __asm mov _zzq_result, edx + } + return _zzq_result; +} + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned int __addr; \ + __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %EAX = guest_NRADDR */ \ + __asm xchg ecx,ecx \ + __asm mov __addr, eax \ + } \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_EAX ERROR + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ + __asm xchg edi,edi \ + } \ + } while (0) + +#else +#error Unsupported compiler. +#endif + +#endif /* PLAT_x86_win32 */ + +/* ------------------------ amd64-{linux,darwin} --------------- */ + +#if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) \ + || (defined(PLAT_amd64_win64) && defined(__GNUC__)) + +typedef + struct { + unsigned long long int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rolq $3, %%rdi ; rolq $13, %%rdi\n\t" \ + "rolq $61, %%rdi ; rolq $51, %%rdi\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + __extension__ \ + ({ volatile unsigned long long int _zzq_args[6]; \ + volatile unsigned long long int _zzq_result; \ + _zzq_args[0] = (unsigned long long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %RDX = client_request ( %RAX ) */ \ + "xchgq %%rbx,%%rbx" \ + : "=d" (_zzq_result) \ + : "a" (&_zzq_args[0]), "0" (_zzq_default) \ + : "cc", "memory" \ + ); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned long long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %RAX = guest_NRADDR */ \ + "xchgq %%rcx,%%rcx" \ + : "=a" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_RAX \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir *%RAX */ \ + "xchgq %%rdx,%%rdx\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "xchgq %%rdi,%%rdi\n\t" \ + : : : "cc", "memory" \ + ); \ + } while (0) + +#endif /* PLAT_amd64_linux || PLAT_amd64_darwin */ + +/* ------------------------- amd64-Win64 ------------------------- */ + +#if defined(PLAT_amd64_win64) && !defined(__GNUC__) + +#error Unsupported compiler. + +#endif /* PLAT_amd64_win64 */ + +/* ------------------------ ppc32-linux ------------------------ */ + +#if defined(PLAT_ppc32_linux) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rlwinm 0,0,3,0,31 ; rlwinm 0,0,13,0,31\n\t" \ + "rlwinm 0,0,29,0,31 ; rlwinm 0,0,19,0,31\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + __extension__ \ + ({ unsigned int _zzq_args[6]; \ + unsigned int _zzq_result; \ + unsigned int* _zzq_ptr; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 3,%1\n\t" /*default*/ \ + "mr 4,%2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" /*result*/ \ + : "=b" (_zzq_result) \ + : "b" (_zzq_default), "b" (_zzq_ptr) \ + : "cc", "memory", "r3", "r4"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "or 5,5,5\n\t" \ + ); \ + } while (0) + +#endif /* PLAT_ppc32_linux */ + +/* ------------------------ ppc64-linux ------------------------ */ + +#if defined(PLAT_ppc64be_linux) + +typedef + struct { + unsigned long long int nraddr; /* where's the code? */ + unsigned long long int r2; /* what tocptr do we need? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ + "rotldi 0,0,61 ; rotldi 0,0,51\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + __extension__ \ + ({ unsigned long long int _zzq_args[6]; \ + unsigned long long int _zzq_result; \ + unsigned long long int* _zzq_ptr; \ + _zzq_args[0] = (unsigned long long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 3,%1\n\t" /*default*/ \ + "mr 4,%2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" /*result*/ \ + : "=b" (_zzq_result) \ + : "b" (_zzq_default), "b" (_zzq_ptr) \ + : "cc", "memory", "r3", "r4"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned long long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR_GPR2 */ \ + "or 4,4,4\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->r2 = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "or 5,5,5\n\t" \ + ); \ + } while (0) + +#endif /* PLAT_ppc64be_linux */ + +#if defined(PLAT_ppc64le_linux) + +typedef + struct { + unsigned long long int nraddr; /* where's the code? */ + unsigned long long int r2; /* what tocptr do we need? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ + "rotldi 0,0,61 ; rotldi 0,0,51\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + __extension__ \ + ({ unsigned long long int _zzq_args[6]; \ + unsigned long long int _zzq_result; \ + unsigned long long int* _zzq_ptr; \ + _zzq_args[0] = (unsigned long long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 3,%1\n\t" /*default*/ \ + "mr 4,%2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" /*result*/ \ + : "=b" (_zzq_result) \ + : "b" (_zzq_default), "b" (_zzq_ptr) \ + : "cc", "memory", "r3", "r4"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned long long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR_GPR2 */ \ + "or 4,4,4\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->r2 = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R12 */ \ + "or 3,3,3\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "or 5,5,5\n\t" \ + ); \ + } while (0) + +#endif /* PLAT_ppc64le_linux */ + +/* ------------------------- arm-linux ------------------------- */ + +#if defined(PLAT_arm_linux) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "mov r12, r12, ror #3 ; mov r12, r12, ror #13 \n\t" \ + "mov r12, r12, ror #29 ; mov r12, r12, ror #19 \n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + __extension__ \ + ({volatile unsigned int _zzq_args[6]; \ + volatile unsigned int _zzq_result; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + __asm__ volatile("mov r3, %1\n\t" /*default*/ \ + "mov r4, %2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* R3 = client_request ( R4 ) */ \ + "orr r10, r10, r10\n\t" \ + "mov %0, r3" /*result*/ \ + : "=r" (_zzq_result) \ + : "r" (_zzq_default), "r" (&_zzq_args[0]) \ + : "cc","memory", "r3", "r4"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* R3 = guest_NRADDR */ \ + "orr r11, r11, r11\n\t" \ + "mov %0, r3" \ + : "=r" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R4 */ \ + "orr r12, r12, r12\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "orr r9, r9, r9\n\t" \ + : : : "cc", "memory" \ + ); \ + } while (0) + +#endif /* PLAT_arm_linux */ + +/* ------------------------ arm64-linux ------------------------- */ + +#if defined(PLAT_arm64_linux) + +typedef + struct { + unsigned long long int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "ror x12, x12, #3 ; ror x12, x12, #13 \n\t" \ + "ror x12, x12, #51 ; ror x12, x12, #61 \n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + __extension__ \ + ({volatile unsigned long long int _zzq_args[6]; \ + volatile unsigned long long int _zzq_result; \ + _zzq_args[0] = (unsigned long long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ + __asm__ volatile("mov x3, %1\n\t" /*default*/ \ + "mov x4, %2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* X3 = client_request ( X4 ) */ \ + "orr x10, x10, x10\n\t" \ + "mov %0, x3" /*result*/ \ + : "=r" (_zzq_result) \ + : "r" (_zzq_default), "r" (&_zzq_args[0]) \ + : "cc","memory", "x3", "x4"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned long long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* X3 = guest_NRADDR */ \ + "orr x11, x11, x11\n\t" \ + "mov %0, x3" \ + : "=r" (__addr) \ + : \ + : "cc", "memory", "x3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir X8 */ \ + "orr x12, x12, x12\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "orr x9, x9, x9\n\t" \ + : : : "cc", "memory" \ + ); \ + } while (0) + +#endif /* PLAT_arm64_linux */ + +/* ------------------------ s390x-linux ------------------------ */ + +#if defined(PLAT_s390x_linux) + +typedef + struct { + unsigned long long int nraddr; /* where's the code? */ + } + OrigFn; + +/* __SPECIAL_INSTRUCTION_PREAMBLE will be used to identify Valgrind specific + * code. This detection is implemented in platform specific toIR.c + * (e.g. VEX/priv/guest_s390_decoder.c). + */ +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "lr 15,15\n\t" \ + "lr 1,1\n\t" \ + "lr 2,2\n\t" \ + "lr 3,3\n\t" + +#define __CLIENT_REQUEST_CODE "lr 2,2\n\t" +#define __GET_NR_CONTEXT_CODE "lr 3,3\n\t" +#define __CALL_NO_REDIR_CODE "lr 4,4\n\t" +#define __VEX_INJECT_IR_CODE "lr 5,5\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + __extension__ \ + ({volatile unsigned long long int _zzq_args[6]; \ + volatile unsigned long long int _zzq_result; \ + _zzq_args[0] = (unsigned long long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ + __asm__ volatile(/* r2 = args */ \ + "lgr 2,%1\n\t" \ + /* r3 = default */ \ + "lgr 3,%2\n\t" \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + __CLIENT_REQUEST_CODE \ + /* results = r3 */ \ + "lgr %0, 3\n\t" \ + : "=d" (_zzq_result) \ + : "a" (&_zzq_args[0]), "0" (_zzq_default) \ + : "cc", "2", "3", "memory" \ + ); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned long long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + __GET_NR_CONTEXT_CODE \ + "lgr %0, 3\n\t" \ + : "=a" (__addr) \ + : \ + : "cc", "3", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_R1 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + __CALL_NO_REDIR_CODE + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + __VEX_INJECT_IR_CODE); \ + } while (0) + +#endif /* PLAT_s390x_linux */ + +/* ------------------------- mips32-linux ---------------- */ + +#if defined(PLAT_mips32_linux) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +/* .word 0x342 + * .word 0x742 + * .word 0xC2 + * .word 0x4C2*/ +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "srl $0, $0, 13\n\t" \ + "srl $0, $0, 29\n\t" \ + "srl $0, $0, 3\n\t" \ + "srl $0, $0, 19\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + __extension__ \ + ({ volatile unsigned int _zzq_args[6]; \ + volatile unsigned int _zzq_result; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + __asm__ volatile("move $11, %1\n\t" /*default*/ \ + "move $12, %2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* T3 = client_request ( T4 ) */ \ + "or $13, $13, $13\n\t" \ + "move %0, $11\n\t" /*result*/ \ + : "=r" (_zzq_result) \ + : "r" (_zzq_default), "r" (&_zzq_args[0]) \ + : "$11", "$12"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %t9 = guest_NRADDR */ \ + "or $14, $14, $14\n\t" \ + "move %0, $11" /*result*/ \ + : "=r" (__addr) \ + : \ + : "$11" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_T9 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir *%t9 */ \ + "or $15, $15, $15\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "or $11, $11, $11\n\t" \ + ); \ + } while (0) + + +#endif /* PLAT_mips32_linux */ + +/* ------------------------- mips64-linux ---------------- */ + +#if defined(PLAT_mips64_linux) + +typedef + struct { + unsigned long long nraddr; /* where's the code? */ + } + OrigFn; + +/* dsll $0,$0, 3 + * dsll $0,$0, 13 + * dsll $0,$0, 29 + * dsll $0,$0, 19*/ +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "dsll $0,$0, 3 ; dsll $0,$0,13\n\t" \ + "dsll $0,$0,29 ; dsll $0,$0,19\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + __extension__ \ + ({ volatile unsigned long long int _zzq_args[6]; \ + volatile unsigned long long int _zzq_result; \ + _zzq_args[0] = (unsigned long long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ + __asm__ volatile("move $11, %1\n\t" /*default*/ \ + "move $12, %2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* $11 = client_request ( $12 ) */ \ + "or $13, $13, $13\n\t" \ + "move %0, $11\n\t" /*result*/ \ + : "=r" (_zzq_result) \ + : "r" (_zzq_default), "r" (&_zzq_args[0]) \ + : "$11", "$12"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned long long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* $11 = guest_NRADDR */ \ + "or $14, $14, $14\n\t" \ + "move %0, $11" /*result*/ \ + : "=r" (__addr) \ + : \ + : "$11"); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_T9 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir $25 */ \ + "or $15, $15, $15\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "or $11, $11, $11\n\t" \ + ); \ + } while (0) + +#endif /* PLAT_mips64_linux */ + +/* Insert assembly code for other platforms here... */ + +#endif /* NVALGRIND */ + + +/* ------------------------------------------------------------------ */ +/* PLATFORM SPECIFICS for FUNCTION WRAPPING. This is all very */ +/* ugly. It's the least-worst tradeoff I can think of. */ +/* ------------------------------------------------------------------ */ + +/* This section defines magic (a.k.a appalling-hack) macros for doing + guaranteed-no-redirection macros, so as to get from function + wrappers to the functions they are wrapping. The whole point is to + construct standard call sequences, but to do the call itself with a + special no-redirect call pseudo-instruction that the JIT + understands and handles specially. This section is long and + repetitious, and I can't see a way to make it shorter. + + The naming scheme is as follows: + + CALL_FN_{W,v}_{v,W,WW,WWW,WWWW,5W,6W,7W,etc} + + 'W' stands for "word" and 'v' for "void". Hence there are + different macros for calling arity 0, 1, 2, 3, 4, etc, functions, + and for each, the possibility of returning a word-typed result, or + no result. +*/ + +/* Use these to write the name of your wrapper. NOTE: duplicates + VG_WRAP_FUNCTION_Z{U,Z} in pub_tool_redir.h. NOTE also: inserts + the default behaviour equivalance class tag "0000" into the name. + See pub_tool_redir.h for details -- normally you don't need to + think about this, though. */ + +/* Use an extra level of macroisation so as to ensure the soname/fnname + args are fully macro-expanded before pasting them together. */ +#define VG_CONCAT4(_aa,_bb,_cc,_dd) _aa##_bb##_cc##_dd + +#define I_WRAP_SONAME_FNNAME_ZU(soname,fnname) \ + VG_CONCAT4(_vgw00000ZU_,soname,_,fnname) + +#define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname) \ + VG_CONCAT4(_vgw00000ZZ_,soname,_,fnname) + +/* Use this macro from within a wrapper function to collect the + context (address and possibly other info) of the original function. + Once you have that you can then use it in one of the CALL_FN_ + macros. The type of the argument _lval is OrigFn. */ +#define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NR_CONTEXT(_lval) + +/* Also provide end-user facilities for function replacement, rather + than wrapping. A replacement function differs from a wrapper in + that it has no way to get hold of the original function being + called, and hence no way to call onwards to it. In a replacement + function, VALGRIND_GET_ORIG_FN always returns zero. */ + +#define I_REPLACE_SONAME_FNNAME_ZU(soname,fnname) \ + VG_CONCAT4(_vgr00000ZU_,soname,_,fnname) + +#define I_REPLACE_SONAME_FNNAME_ZZ(soname,fnname) \ + VG_CONCAT4(_vgr00000ZZ_,soname,_,fnname) + +/* Derivatives of the main macros below, for calling functions + returning void. */ + +#define CALL_FN_v_v(fnptr) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_v(_junk,fnptr); } while (0) + +#define CALL_FN_v_W(fnptr, arg1) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_W(_junk,fnptr,arg1); } while (0) + +#define CALL_FN_v_WW(fnptr, arg1,arg2) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0) + +#define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0) + +#define CALL_FN_v_WWWW(fnptr, arg1,arg2,arg3,arg4) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_WWWW(_junk,fnptr,arg1,arg2,arg3,arg4); } while (0) + +#define CALL_FN_v_5W(fnptr, arg1,arg2,arg3,arg4,arg5) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_5W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5); } while (0) + +#define CALL_FN_v_6W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_6W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6); } while (0) + +#define CALL_FN_v_7W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6,arg7) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_7W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6,arg7); } while (0) + +/* ------------------------- x86-{linux,darwin} ---------------- */ + +#if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) + +/* These regs are trashed by the hidden call. No need to mention eax + as gcc can already see that, plus causes gcc to bomb. */ +#define __CALLER_SAVED_REGS /*"eax"*/ "ecx", "edx" + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +#define VALGRIND_ALIGN_STACK \ + "movl %%esp,%%edi\n\t" \ + "andl $0xfffffff0,%%esp\n\t" +#define VALGRIND_RESTORE_STACK \ + "movl %%edi,%%esp\n\t" + +/* These CALL_FN_ macros assume that on x86-linux, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $12, %%esp\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $8, %%esp\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $4, %%esp\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $12, %%esp\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $8, %%esp\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $4, %%esp\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $12, %%esp\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $8, %%esp\n\t" \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $4, %%esp\n\t" \ + "pushl 44(%%eax)\n\t" \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "pushl 48(%%eax)\n\t" \ + "pushl 44(%%eax)\n\t" \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_x86_linux || PLAT_x86_darwin */ + +/* ------------------------ amd64-{linux,darwin} --------------- */ + +#if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) + +/* ARGREGS: rdi rsi rdx rcx r8 r9 (the rest on stack in R-to-L order) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS /*"rax",*/ "rcx", "rdx", "rsi", \ + "rdi", "r8", "r9", "r10", "r11" + +/* This is all pretty complex. It's so as to make stack unwinding + work reliably. See bug 243270. The basic problem is the sub and + add of 128 of %rsp in all of the following macros. If gcc believes + the CFA is in %rsp, then unwinding may fail, because what's at the + CFA is not what gcc "expected" when it constructs the CFIs for the + places where the macros are instantiated. + + But we can't just add a CFI annotation to increase the CFA offset + by 128, to match the sub of 128 from %rsp, because we don't know + whether gcc has chosen %rsp as the CFA at that point, or whether it + has chosen some other register (eg, %rbp). In the latter case, + adding a CFI annotation to change the CFA offset is simply wrong. + + So the solution is to get hold of the CFA using + __builtin_dwarf_cfa(), put it in a known register, and add a + CFI annotation to say what the register is. We choose %rbp for + this (perhaps perversely), because: + + (1) %rbp is already subject to unwinding. If a new register was + chosen then the unwinder would have to unwind it in all stack + traces, which is expensive, and + + (2) %rbp is already subject to precise exception updates in the + JIT. If a new register was chosen, we'd have to have precise + exceptions for it too, which reduces performance of the + generated code. + + However .. one extra complication. We can't just whack the result + of __builtin_dwarf_cfa() into %rbp and then add %rbp to the + list of trashed registers at the end of the inline assembly + fragments; gcc won't allow %rbp to appear in that list. Hence + instead we need to stash %rbp in %r15 for the duration of the asm, + and say that %r15 is trashed instead. gcc seems happy to go with + that. + + Oh .. and this all needs to be conditionalised so that it is + unchanged from before this commit, when compiled with older gccs + that don't support __builtin_dwarf_cfa. Furthermore, since + this header file is freestanding, it has to be independent of + config.h, and so the following conditionalisation cannot depend on + configure time checks. + + Although it's not clear from + 'defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM)', + this expression excludes Darwin. + .cfi directives in Darwin assembly appear to be completely + different and I haven't investigated how they work. + + For even more entertainment value, note we have to use the + completely undocumented __builtin_dwarf_cfa(), which appears to + really compute the CFA, whereas __builtin_frame_address(0) claims + to but actually doesn't. See + https://bugs.kde.org/show_bug.cgi?id=243270#c47 +*/ +#if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) +# define __FRAME_POINTER \ + ,"r"(__builtin_dwarf_cfa()) +# define VALGRIND_CFI_PROLOGUE \ + "movq %%rbp, %%r15\n\t" \ + "movq %2, %%rbp\n\t" \ + ".cfi_remember_state\n\t" \ + ".cfi_def_cfa rbp, 0\n\t" +# define VALGRIND_CFI_EPILOGUE \ + "movq %%r15, %%rbp\n\t" \ + ".cfi_restore_state\n\t" +#else +# define __FRAME_POINTER +# define VALGRIND_CFI_PROLOGUE +# define VALGRIND_CFI_EPILOGUE +#endif + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +#define VALGRIND_ALIGN_STACK \ + "movq %%rsp,%%r14\n\t" \ + "andq $0xfffffffffffffff0,%%rsp\n\t" +#define VALGRIND_RESTORE_STACK \ + "movq %%r14,%%rsp\n\t" + +/* These CALL_FN_ macros assume that on amd64-linux, sizeof(unsigned + long) == 8. */ + +/* NB 9 Sept 07. There is a nasty kludge here in all these CALL_FN_ + macros. In order not to trash the stack redzone, we need to drop + %rsp by 128 before the hidden call, and restore afterwards. The + nastyness is that it is only by luck that the stack still appears + to be unwindable during the hidden call - since then the behaviour + of any routine using this macro does not match what the CFI data + says. Sigh. + + Why is this important? Imagine that a wrapper has a stack + allocated local, and passes to the hidden call, a pointer to it. + Because gcc does not know about the hidden call, it may allocate + that local in the redzone. Unfortunately the hidden call may then + trash it before it comes to use it. So we must step clear of the + redzone, for the duration of the hidden call, to make it safe. + + Probably the same problem afflicts the other redzone-style ABIs too + (ppc64-linux); but for those, the stack is + self describing (none of this CFI nonsense) so at least messing + with the stack pointer doesn't give a danger of non-unwindable + stack. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $136,%%rsp\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $136,%%rsp\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $136,%%rsp\n\t" \ + "pushq 88(%%rax)\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "pushq 96(%%rax)\n\t" \ + "pushq 88(%%rax)\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_amd64_linux || PLAT_amd64_darwin */ + +/* ------------------------ ppc32-linux ------------------------ */ + +#if defined(PLAT_ppc32_linux) + +/* This is useful for finding out about the on-stack stuff: + + extern int f9 ( int,int,int,int,int,int,int,int,int ); + extern int f10 ( int,int,int,int,int,int,int,int,int,int ); + extern int f11 ( int,int,int,int,int,int,int,int,int,int,int ); + extern int f12 ( int,int,int,int,int,int,int,int,int,int,int,int ); + + int g9 ( void ) { + return f9(11,22,33,44,55,66,77,88,99); + } + int g10 ( void ) { + return f10(11,22,33,44,55,66,77,88,99,110); + } + int g11 ( void ) { + return f11(11,22,33,44,55,66,77,88,99,110,121); + } + int g12 ( void ) { + return f12(11,22,33,44,55,66,77,88,99,110,121,132); + } +*/ + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +#define VALGRIND_ALIGN_STACK \ + "mr 28,1\n\t" \ + "rlwinm 1,1,0,0,27\n\t" +#define VALGRIND_RESTORE_STACK \ + "mr 1,28\n\t" + +/* These CALL_FN_ macros assume that on ppc32-linux, + sizeof(unsigned long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "addi 1,1,-16\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "addi 1,1,-16\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "addi 1,1,-32\n\t" \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,16(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + _argvec[12] = (unsigned long)arg12; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "addi 1,1,-32\n\t" \ + /* arg12 */ \ + "lwz 3,48(11)\n\t" \ + "stw 3,20(1)\n\t" \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,16(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc32_linux */ + +/* ------------------------ ppc64-linux ------------------------ */ + +#if defined(PLAT_ppc64be_linux) + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +#define VALGRIND_ALIGN_STACK \ + "mr 28,1\n\t" \ + "rldicr 1,1,0,59\n\t" +#define VALGRIND_RESTORE_STACK \ + "mr 1,28\n\t" + +/* These CALL_FN_ macros assume that on ppc64-linux, sizeof(unsigned + long) == 8. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+0]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+1]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+2]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+3]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+4]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+5]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+6]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+7]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+8]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+9]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+10]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+11]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+12]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + _argvec[2+12] = (unsigned long)arg12; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg12 */ \ + "ld 3,96(11)\n\t" \ + "std 3,136(1)\n\t" \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc64be_linux */ + +/* ------------------------- ppc64le-linux ----------------------- */ +#if defined(PLAT_ppc64le_linux) + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +#define VALGRIND_ALIGN_STACK \ + "mr 28,1\n\t" \ + "rldicr 1,1,0,59\n\t" +#define VALGRIND_RESTORE_STACK \ + "mr 1,28\n\t" + +/* These CALL_FN_ macros assume that on ppc64-linux, sizeof(unsigned + long) == 8. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+0]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+1]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+2]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+3]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+4]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+5]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+6]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+7]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+8]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 10, 64(12)\n\t" /* arg8->r10 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+9]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg9 */ \ + "ld 3,72(12)\n\t" \ + "std 3,96(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 10, 64(12)\n\t" /* arg8->r10 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+10]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg10 */ \ + "ld 3,80(12)\n\t" \ + "std 3,104(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(12)\n\t" \ + "std 3,96(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 10, 64(12)\n\t" /* arg8->r10 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+11]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg11 */ \ + "ld 3,88(12)\n\t" \ + "std 3,112(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(12)\n\t" \ + "std 3,104(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(12)\n\t" \ + "std 3,96(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 10, 64(12)\n\t" /* arg8->r10 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+12]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + _argvec[2+12] = (unsigned long)arg12; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg12 */ \ + "ld 3,96(12)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg11 */ \ + "ld 3,88(12)\n\t" \ + "std 3,112(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(12)\n\t" \ + "std 3,104(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(12)\n\t" \ + "std 3,96(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 10, 64(12)\n\t" /* arg8->r10 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc64le_linux */ + +/* ------------------------- arm-linux ------------------------- */ + +#if defined(PLAT_arm_linux) + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS "r0", "r1", "r2", "r3","r4","r14" + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +/* This is a bit tricky. We store the original stack pointer in r10 + as it is callee-saves. gcc doesn't allow the use of r11 for some + reason. Also, we can't directly "bic" the stack pointer in thumb + mode since r13 isn't an allowed register number in that context. + So use r4 as a temporary, since that is about to get trashed + anyway, just after each use of this macro. Side effect is we need + to be very careful about any future changes, since + VALGRIND_ALIGN_STACK simply assumes r4 is usable. */ +#define VALGRIND_ALIGN_STACK \ + "mov r10, sp\n\t" \ + "mov r4, sp\n\t" \ + "bic r4, r4, #7\n\t" \ + "mov sp, r4\n\t" +#define VALGRIND_RESTORE_STACK \ + "mov sp, r10\n\t" + +/* These CALL_FN_ macros assume that on arm-linux, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #4 \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "push {r0} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "push {r0, r1} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #4 \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "push {r0, r1, r2} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "ldr r3, [%1, #32] \n\t" \ + "push {r0, r1, r2, r3} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #4 \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "ldr r3, [%1, #32] \n\t" \ + "ldr r4, [%1, #36] \n\t" \ + "push {r0, r1, r2, r3, r4} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #40] \n\t" \ + "push {r0} \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "ldr r3, [%1, #32] \n\t" \ + "ldr r4, [%1, #36] \n\t" \ + "push {r0, r1, r2, r3, r4} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #4 \n\t" \ + "ldr r0, [%1, #40] \n\t" \ + "ldr r1, [%1, #44] \n\t" \ + "push {r0, r1} \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "ldr r3, [%1, #32] \n\t" \ + "ldr r4, [%1, #36] \n\t" \ + "push {r0, r1, r2, r3, r4} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #40] \n\t" \ + "ldr r1, [%1, #44] \n\t" \ + "ldr r2, [%1, #48] \n\t" \ + "push {r0, r1, r2} \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "ldr r3, [%1, #32] \n\t" \ + "ldr r4, [%1, #36] \n\t" \ + "push {r0, r1, r2, r3, r4} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_arm_linux */ + +/* ------------------------ arm64-linux ------------------------ */ + +#if defined(PLAT_arm64_linux) + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "x0", "x1", "x2", "x3","x4", "x5", "x6", "x7", "x8", "x9", \ + "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", \ + "x18", "x19", "x20", "x30", \ + "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", \ + "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", \ + "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", \ + "v26", "v27", "v28", "v29", "v30", "v31" + +/* x21 is callee-saved, so we can use it to save and restore SP around + the hidden call. */ +#define VALGRIND_ALIGN_STACK \ + "mov x21, sp\n\t" \ + "bic sp, x21, #15\n\t" +#define VALGRIND_RESTORE_STACK \ + "mov sp, x21\n\t" + +/* These CALL_FN_ macros assume that on arm64-linux, + sizeof(unsigned long) == 8. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x7, [%1, #64] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #0x20 \n\t" \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x7, [%1, #64] \n\t" \ + "ldr x8, [%1, #72] \n\t" \ + "str x8, [sp, #0] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #0x20 \n\t" \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x7, [%1, #64] \n\t" \ + "ldr x8, [%1, #72] \n\t" \ + "str x8, [sp, #0] \n\t" \ + "ldr x8, [%1, #80] \n\t" \ + "str x8, [sp, #8] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #0x30 \n\t" \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x7, [%1, #64] \n\t" \ + "ldr x8, [%1, #72] \n\t" \ + "str x8, [sp, #0] \n\t" \ + "ldr x8, [%1, #80] \n\t" \ + "str x8, [sp, #8] \n\t" \ + "ldr x8, [%1, #88] \n\t" \ + "str x8, [sp, #16] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11, \ + arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #0x30 \n\t" \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x7, [%1, #64] \n\t" \ + "ldr x8, [%1, #72] \n\t" \ + "str x8, [sp, #0] \n\t" \ + "ldr x8, [%1, #80] \n\t" \ + "str x8, [sp, #8] \n\t" \ + "ldr x8, [%1, #88] \n\t" \ + "str x8, [sp, #16] \n\t" \ + "ldr x8, [%1, #96] \n\t" \ + "str x8, [sp, #24] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_arm64_linux */ + +/* ------------------------- s390x-linux ------------------------- */ + +#if defined(PLAT_s390x_linux) + +/* Similar workaround as amd64 (see above), but we use r11 as frame + pointer and save the old r11 in r7. r11 might be used for + argvec, therefore we copy argvec in r1 since r1 is clobbered + after the call anyway. */ +#if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) +# define __FRAME_POINTER \ + ,"d"(__builtin_dwarf_cfa()) +# define VALGRIND_CFI_PROLOGUE \ + ".cfi_remember_state\n\t" \ + "lgr 1,%1\n\t" /* copy the argvec pointer in r1 */ \ + "lgr 7,11\n\t" \ + "lgr 11,%2\n\t" \ + ".cfi_def_cfa r11, 0\n\t" +# define VALGRIND_CFI_EPILOGUE \ + "lgr 11, 7\n\t" \ + ".cfi_restore_state\n\t" +#else +# define __FRAME_POINTER +# define VALGRIND_CFI_PROLOGUE \ + "lgr 1,%1\n\t" +# define VALGRIND_CFI_EPILOGUE +#endif + +/* Nb: On s390 the stack pointer is properly aligned *at all times* + according to the s390 GCC maintainer. (The ABI specification is not + precise in this regard.) Therefore, VALGRIND_ALIGN_STACK and + VALGRIND_RESTORE_STACK are not defined here. */ + +/* These regs are trashed by the hidden call. Note that we overwrite + r14 in s390_irgen_noredir (VEX/priv/guest_s390_irgen.c) to give the + function a proper return address. All others are ABI defined call + clobbers. */ +#define __CALLER_SAVED_REGS "0","1","2","3","4","5","14", \ + "f0","f1","f2","f3","f4","f5","f6","f7" + +/* Nb: Although r11 is modified in the asm snippets below (inside + VALGRIND_CFI_PROLOGUE) it is not listed in the clobber section, for + two reasons: + (1) r11 is restored in VALGRIND_CFI_EPILOGUE, so effectively it is not + modified + (2) GCC will complain that r11 cannot appear inside a clobber section, + when compiled with -O -fno-omit-frame-pointer + */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 1, 0(1)\n\t" /* target->r1 */ \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "d" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +/* The call abi has the arguments in r2-r6 and stack */ +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1, arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1, arg2, arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1, arg2, arg3, arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1, arg2, arg3, arg4, arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-168\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,168\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-176\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,176\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7 ,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-184\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "mvc 176(8,15), 64(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,184\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7 ,arg8, arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-192\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "mvc 176(8,15), 64(1)\n\t" \ + "mvc 184(8,15), 72(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,192\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7 ,arg8, arg9, arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-200\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "mvc 176(8,15), 64(1)\n\t" \ + "mvc 184(8,15), 72(1)\n\t" \ + "mvc 192(8,15), 80(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,200\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7 ,arg8, arg9, arg10, arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-208\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "mvc 176(8,15), 64(1)\n\t" \ + "mvc 184(8,15), 72(1)\n\t" \ + "mvc 192(8,15), 80(1)\n\t" \ + "mvc 200(8,15), 88(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,208\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7 ,arg8, arg9, arg10, arg11, arg12)\ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + _argvec[12] = (unsigned long)arg12; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-216\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "mvc 176(8,15), 64(1)\n\t" \ + "mvc 184(8,15), 72(1)\n\t" \ + "mvc 192(8,15), 80(1)\n\t" \ + "mvc 200(8,15), 88(1)\n\t" \ + "mvc 208(8,15), 96(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,216\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + + +#endif /* PLAT_s390x_linux */ + +/* ------------------------- mips32-linux ----------------------- */ + +#if defined(PLAT_mips32_linux) + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6", \ +"$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ +"$25", "$31" + +/* These CALL_FN_ macros assume that on mips-linux, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "subu $29, $29, 16 \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 16\n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "subu $29, $29, 16 \n\t" \ + "lw $4, 4(%1) \n\t" /* arg1*/ \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 16 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "subu $29, $29, 16 \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 16 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "subu $29, $29, 16 \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 16 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "subu $29, $29, 16 \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 16 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 24\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 24 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 32\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "nop\n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 32 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 32\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 32 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 40\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 32(%1) \n\t" \ + "sw $4, 28($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 40 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 40\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 32(%1) \n\t" \ + "sw $4, 28($29) \n\t" \ + "lw $4, 36(%1) \n\t" \ + "sw $4, 32($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 40 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 48\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 32(%1) \n\t" \ + "sw $4, 28($29) \n\t" \ + "lw $4, 36(%1) \n\t" \ + "sw $4, 32($29) \n\t" \ + "lw $4, 40(%1) \n\t" \ + "sw $4, 36($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 48 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 48\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 32(%1) \n\t" \ + "sw $4, 28($29) \n\t" \ + "lw $4, 36(%1) \n\t" \ + "sw $4, 32($29) \n\t" \ + "lw $4, 40(%1) \n\t" \ + "sw $4, 36($29) \n\t" \ + "lw $4, 44(%1) \n\t" \ + "sw $4, 40($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 48 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 56\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 32(%1) \n\t" \ + "sw $4, 28($29) \n\t" \ + "lw $4, 36(%1) \n\t" \ + "sw $4, 32($29) \n\t" \ + "lw $4, 40(%1) \n\t" \ + "sw $4, 36($29) \n\t" \ + "lw $4, 44(%1) \n\t" \ + "sw $4, 40($29) \n\t" \ + "lw $4, 48(%1) \n\t" \ + "sw $4, 44($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 56 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_mips32_linux */ + +/* ------------------------- mips64-linux ------------------------- */ + +#if defined(PLAT_mips64_linux) + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6", \ +"$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ +"$25", "$31" + +/* These CALL_FN_ macros assume that on mips-linux, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" /* arg1*/ \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $11, 64(%1)\n\t" \ + "ld $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + "dsubu $29, $29, 8\n\t" \ + "ld $4, 72(%1)\n\t" \ + "sd $4, 0($29)\n\t" \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $11, 64(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "daddu $29, $29, 8\n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + "dsubu $29, $29, 16\n\t" \ + "ld $4, 72(%1)\n\t" \ + "sd $4, 0($29)\n\t" \ + "ld $4, 80(%1)\n\t" \ + "sd $4, 8($29)\n\t" \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $11, 64(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "daddu $29, $29, 16\n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + "dsubu $29, $29, 24\n\t" \ + "ld $4, 72(%1)\n\t" \ + "sd $4, 0($29)\n\t" \ + "ld $4, 80(%1)\n\t" \ + "sd $4, 8($29)\n\t" \ + "ld $4, 88(%1)\n\t" \ + "sd $4, 16($29)\n\t" \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $11, 64(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "daddu $29, $29, 24\n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + "dsubu $29, $29, 32\n\t" \ + "ld $4, 72(%1)\n\t" \ + "sd $4, 0($29)\n\t" \ + "ld $4, 80(%1)\n\t" \ + "sd $4, 8($29)\n\t" \ + "ld $4, 88(%1)\n\t" \ + "sd $4, 16($29)\n\t" \ + "ld $4, 96(%1)\n\t" \ + "sd $4, 24($29)\n\t" \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $11, 64(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "daddu $29, $29, 32\n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_mips64_linux */ + + +/* ------------------------------------------------------------------ */ +/* ARCHITECTURE INDEPENDENT MACROS for CLIENT REQUESTS. */ +/* */ +/* ------------------------------------------------------------------ */ + +/* Some request codes. There are many more of these, but most are not + exposed to end-user view. These are the public ones, all of the + form 0x1000 + small_number. + + Core ones are in the range 0x00000000--0x0000ffff. The non-public + ones start at 0x2000. +*/ + +/* These macros are used by tools -- they must be public, but don't + embed them into other programs. */ +#define VG_USERREQ_TOOL_BASE(a,b) \ + ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16)) +#define VG_IS_TOOL_USERREQ(a, b, v) \ + (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000)) + +/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !! + This enum comprises an ABI exported by Valgrind to programs + which use client requests. DO NOT CHANGE THE ORDER OF THESE + ENTRIES, NOR DELETE ANY -- add new ones at the end. */ +typedef + enum { VG_USERREQ__RUNNING_ON_VALGRIND = 0x1001, + VG_USERREQ__DISCARD_TRANSLATIONS = 0x1002, + + /* These allow any function to be called from the simulated + CPU but run on the real CPU. Nb: the first arg passed to + the function is always the ThreadId of the running + thread! So CLIENT_CALL0 actually requires a 1 arg + function, etc. */ + VG_USERREQ__CLIENT_CALL0 = 0x1101, + VG_USERREQ__CLIENT_CALL1 = 0x1102, + VG_USERREQ__CLIENT_CALL2 = 0x1103, + VG_USERREQ__CLIENT_CALL3 = 0x1104, + + /* Can be useful in regression testing suites -- eg. can + send Valgrind's output to /dev/null and still count + errors. */ + VG_USERREQ__COUNT_ERRORS = 0x1201, + + /* Allows the client program and/or gdbserver to execute a monitor + command. */ + VG_USERREQ__GDB_MONITOR_COMMAND = 0x1202, + + /* These are useful and can be interpreted by any tool that + tracks malloc() et al, by using vg_replace_malloc.c. */ + VG_USERREQ__MALLOCLIKE_BLOCK = 0x1301, + VG_USERREQ__RESIZEINPLACE_BLOCK = 0x130b, + VG_USERREQ__FREELIKE_BLOCK = 0x1302, + /* Memory pool support. */ + VG_USERREQ__CREATE_MEMPOOL = 0x1303, + VG_USERREQ__DESTROY_MEMPOOL = 0x1304, + VG_USERREQ__MEMPOOL_ALLOC = 0x1305, + VG_USERREQ__MEMPOOL_FREE = 0x1306, + VG_USERREQ__MEMPOOL_TRIM = 0x1307, + VG_USERREQ__MOVE_MEMPOOL = 0x1308, + VG_USERREQ__MEMPOOL_CHANGE = 0x1309, + VG_USERREQ__MEMPOOL_EXISTS = 0x130a, + + /* Allow printfs to valgrind log. */ + /* The first two pass the va_list argument by value, which + assumes it is the same size as or smaller than a UWord, + which generally isn't the case. Hence are deprecated. + The second two pass the vargs by reference and so are + immune to this problem. */ + /* both :: char* fmt, va_list vargs (DEPRECATED) */ + VG_USERREQ__PRINTF = 0x1401, + VG_USERREQ__PRINTF_BACKTRACE = 0x1402, + /* both :: char* fmt, va_list* vargs */ + VG_USERREQ__PRINTF_VALIST_BY_REF = 0x1403, + VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF = 0x1404, + + /* Stack support. */ + VG_USERREQ__STACK_REGISTER = 0x1501, + VG_USERREQ__STACK_DEREGISTER = 0x1502, + VG_USERREQ__STACK_CHANGE = 0x1503, + + /* Wine support */ + VG_USERREQ__LOAD_PDB_DEBUGINFO = 0x1601, + + /* Querying of debug info. */ + VG_USERREQ__MAP_IP_TO_SRCLOC = 0x1701, + + /* Disable/enable error reporting level. Takes a single + Word arg which is the delta to this thread's error + disablement indicator. Hence 1 disables or further + disables errors, and -1 moves back towards enablement. + Other values are not allowed. */ + VG_USERREQ__CHANGE_ERR_DISABLEMENT = 0x1801, + + /* Initialise IR injection */ + VG_USERREQ__VEX_INIT_FOR_IRI = 0x1901 + } Vg_ClientRequest; + +#if !defined(__GNUC__) +# define __extension__ /* */ +#endif + + +/* Returns the number of Valgrinds this code is running under. That + is, 0 if running natively, 1 if running under Valgrind, 2 if + running under Valgrind which is running under another Valgrind, + etc. */ +#define RUNNING_ON_VALGRIND \ + (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* if not */, \ + VG_USERREQ__RUNNING_ON_VALGRIND, \ + 0, 0, 0, 0, 0) \ + + +/* Discard translation of code in the range [_qzz_addr .. _qzz_addr + + _qzz_len - 1]. Useful if you are debugging a JITter or some such, + since it provides a way to make sure valgrind will retranslate the + invalidated area. Returns no value. */ +#define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DISCARD_TRANSLATIONS, \ + _qzz_addr, _qzz_len, 0, 0, 0) + + +/* These requests are for getting Valgrind itself to print something. + Possibly with a backtrace. This is a really ugly hack. The return value + is the number of characters printed, excluding the "**<pid>** " part at the + start and the backtrace (if present). */ + +#if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER) +/* Modern GCC will optimize the static routine out if unused, + and unused attribute will shut down warnings about it. */ +static int VALGRIND_PRINTF(const char *format, ...) + __attribute__((format(__printf__, 1, 2), __unused__)); +#endif +static int +#if defined(_MSC_VER) +__inline +#endif +VALGRIND_PRINTF(const char *format, ...) +{ +#if defined(NVALGRIND) + return 0; +#else /* NVALGRIND */ +#if defined(_MSC_VER) || defined(__MINGW64__) + uintptr_t _qzz_res; +#else + unsigned long _qzz_res; +#endif + va_list vargs; + va_start(vargs, format); +#if defined(_MSC_VER) || defined(__MINGW64__) + _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0, + VG_USERREQ__PRINTF_VALIST_BY_REF, + (uintptr_t)format, + (uintptr_t)&vargs, + 0, 0, 0); +#else + _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0, + VG_USERREQ__PRINTF_VALIST_BY_REF, + (unsigned long)format, + (unsigned long)&vargs, + 0, 0, 0); +#endif + va_end(vargs); + return (int)_qzz_res; +#endif /* NVALGRIND */ +} + +#if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER) +static int VALGRIND_PRINTF_BACKTRACE(const char *format, ...) + __attribute__((format(__printf__, 1, 2), __unused__)); +#endif +static int +#if defined(_MSC_VER) +__inline +#endif +VALGRIND_PRINTF_BACKTRACE(const char *format, ...) +{ +#if defined(NVALGRIND) + return 0; +#else /* NVALGRIND */ +#if defined(_MSC_VER) || defined(__MINGW64__) + uintptr_t _qzz_res; +#else + unsigned long _qzz_res; +#endif + va_list vargs; + va_start(vargs, format); +#if defined(_MSC_VER) || defined(__MINGW64__) + _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0, + VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF, + (uintptr_t)format, + (uintptr_t)&vargs, + 0, 0, 0); +#else + _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0, + VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF, + (unsigned long)format, + (unsigned long)&vargs, + 0, 0, 0); +#endif + va_end(vargs); + return (int)_qzz_res; +#endif /* NVALGRIND */ +} + + +/* These requests allow control to move from the simulated CPU to the + real CPU, calling an arbitary function. + + Note that the current ThreadId is inserted as the first argument. + So this call: + + VALGRIND_NON_SIMD_CALL2(f, arg1, arg2) + + requires f to have this signature: + + Word f(Word tid, Word arg1, Word arg2) + + where "Word" is a word-sized type. + + Note that these client requests are not entirely reliable. For example, + if you call a function with them that subsequently calls printf(), + there's a high chance Valgrind will crash. Generally, your prospects of + these working are made higher if the called function does not refer to + any global variables, and does not refer to any libc or other functions + (printf et al). Any kind of entanglement with libc or dynamic linking is + likely to have a bad outcome, for tricky reasons which we've grappled + with a lot in the past. +*/ +#define VALGRIND_NON_SIMD_CALL0(_qyy_fn) \ + VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ + VG_USERREQ__CLIENT_CALL0, \ + _qyy_fn, \ + 0, 0, 0, 0) + +#define VALGRIND_NON_SIMD_CALL1(_qyy_fn, _qyy_arg1) \ + VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ + VG_USERREQ__CLIENT_CALL1, \ + _qyy_fn, \ + _qyy_arg1, 0, 0, 0) + +#define VALGRIND_NON_SIMD_CALL2(_qyy_fn, _qyy_arg1, _qyy_arg2) \ + VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ + VG_USERREQ__CLIENT_CALL2, \ + _qyy_fn, \ + _qyy_arg1, _qyy_arg2, 0, 0) + +#define VALGRIND_NON_SIMD_CALL3(_qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3) \ + VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ + VG_USERREQ__CLIENT_CALL3, \ + _qyy_fn, \ + _qyy_arg1, _qyy_arg2, \ + _qyy_arg3, 0) + + +/* Counts the number of errors that have been recorded by a tool. Nb: + the tool must record the errors with VG_(maybe_record_error)() or + VG_(unique_error)() for them to be counted. */ +#define VALGRIND_COUNT_ERRORS \ + (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + 0 /* default return */, \ + VG_USERREQ__COUNT_ERRORS, \ + 0, 0, 0, 0, 0) + +/* Several Valgrind tools (Memcheck, Massif, Helgrind, DRD) rely on knowing + when heap blocks are allocated in order to give accurate results. This + happens automatically for the standard allocator functions such as + malloc(), calloc(), realloc(), memalign(), new, new[], free(), delete, + delete[], etc. + + But if your program uses a custom allocator, this doesn't automatically + happen, and Valgrind will not do as well. For example, if you allocate + superblocks with mmap() and then allocates chunks of the superblocks, all + Valgrind's observations will be at the mmap() level and it won't know that + the chunks should be considered separate entities. In Memcheck's case, + that means you probably won't get heap block overrun detection (because + there won't be redzones marked as unaddressable) and you definitely won't + get any leak detection. + + The following client requests allow a custom allocator to be annotated so + that it can be handled accurately by Valgrind. + + VALGRIND_MALLOCLIKE_BLOCK marks a region of memory as having been allocated + by a malloc()-like function. For Memcheck (an illustrative case), this + does two things: + + - It records that the block has been allocated. This means any addresses + within the block mentioned in error messages will be + identified as belonging to the block. It also means that if the block + isn't freed it will be detected by the leak checker. + + - It marks the block as being addressable and undefined (if 'is_zeroed' is + not set), or addressable and defined (if 'is_zeroed' is set). This + controls how accesses to the block by the program are handled. + + 'addr' is the start of the usable block (ie. after any + redzone), 'sizeB' is its size. 'rzB' is the redzone size if the allocator + can apply redzones -- these are blocks of padding at the start and end of + each block. Adding redzones is recommended as it makes it much more likely + Valgrind will spot block overruns. `is_zeroed' indicates if the memory is + zeroed (or filled with another predictable value), as is the case for + calloc(). + + VALGRIND_MALLOCLIKE_BLOCK should be put immediately after the point where a + heap block -- that will be used by the client program -- is allocated. + It's best to put it at the outermost level of the allocator if possible; + for example, if you have a function my_alloc() which calls + internal_alloc(), and the client request is put inside internal_alloc(), + stack traces relating to the heap block will contain entries for both + my_alloc() and internal_alloc(), which is probably not what you want. + + For Memcheck users: if you use VALGRIND_MALLOCLIKE_BLOCK to carve out + custom blocks from within a heap block, B, that has been allocated with + malloc/calloc/new/etc, then block B will be *ignored* during leak-checking + -- the custom blocks will take precedence. + + VALGRIND_FREELIKE_BLOCK is the partner to VALGRIND_MALLOCLIKE_BLOCK. For + Memcheck, it does two things: + + - It records that the block has been deallocated. This assumes that the + block was annotated as having been allocated via + VALGRIND_MALLOCLIKE_BLOCK. Otherwise, an error will be issued. + + - It marks the block as being unaddressable. + + VALGRIND_FREELIKE_BLOCK should be put immediately after the point where a + heap block is deallocated. + + VALGRIND_RESIZEINPLACE_BLOCK informs a tool about reallocation. For + Memcheck, it does four things: + + - It records that the size of a block has been changed. This assumes that + the block was annotated as having been allocated via + VALGRIND_MALLOCLIKE_BLOCK. Otherwise, an error will be issued. + + - If the block shrunk, it marks the freed memory as being unaddressable. + + - If the block grew, it marks the new area as undefined and defines a red + zone past the end of the new block. + + - The V-bits of the overlap between the old and the new block are preserved. + + VALGRIND_RESIZEINPLACE_BLOCK should be put after allocation of the new block + and before deallocation of the old block. + + In many cases, these three client requests will not be enough to get your + allocator working well with Memcheck. More specifically, if your allocator + writes to freed blocks in any way then a VALGRIND_MAKE_MEM_UNDEFINED call + will be necessary to mark the memory as addressable just before the zeroing + occurs, otherwise you'll get a lot of invalid write errors. For example, + you'll need to do this if your allocator recycles freed blocks, but it + zeroes them before handing them back out (via VALGRIND_MALLOCLIKE_BLOCK). + Alternatively, if your allocator reuses freed blocks for allocator-internal + data structures, VALGRIND_MAKE_MEM_UNDEFINED calls will also be necessary. + + Really, what's happening is a blurring of the lines between the client + program and the allocator... after VALGRIND_FREELIKE_BLOCK is called, the + memory should be considered unaddressable to the client program, but the + allocator knows more than the rest of the client program and so may be able + to safely access it. Extra client requests are necessary for Valgrind to + understand the distinction between the allocator and the rest of the + program. + + Ignored if addr == 0. +*/ +#define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MALLOCLIKE_BLOCK, \ + addr, sizeB, rzB, is_zeroed, 0) + +/* See the comment for VALGRIND_MALLOCLIKE_BLOCK for details. + Ignored if addr == 0. +*/ +#define VALGRIND_RESIZEINPLACE_BLOCK(addr, oldSizeB, newSizeB, rzB) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__RESIZEINPLACE_BLOCK, \ + addr, oldSizeB, newSizeB, rzB, 0) + +/* See the comment for VALGRIND_MALLOCLIKE_BLOCK for details. + Ignored if addr == 0. +*/ +#define VALGRIND_FREELIKE_BLOCK(addr, rzB) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__FREELIKE_BLOCK, \ + addr, rzB, 0, 0, 0) + +/* Create a memory pool. */ +#define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CREATE_MEMPOOL, \ + pool, rzB, is_zeroed, 0, 0) + +/* Destroy a memory pool. */ +#define VALGRIND_DESTROY_MEMPOOL(pool) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DESTROY_MEMPOOL, \ + pool, 0, 0, 0, 0) + +/* Associate a piece of memory with a memory pool. */ +#define VALGRIND_MEMPOOL_ALLOC(pool, addr, size) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_ALLOC, \ + pool, addr, size, 0, 0) + +/* Disassociate a piece of memory from a memory pool. */ +#define VALGRIND_MEMPOOL_FREE(pool, addr) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_FREE, \ + pool, addr, 0, 0, 0) + +/* Disassociate any pieces outside a particular range. */ +#define VALGRIND_MEMPOOL_TRIM(pool, addr, size) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_TRIM, \ + pool, addr, size, 0, 0) + +/* Resize and/or move a piece associated with a memory pool. */ +#define VALGRIND_MOVE_MEMPOOL(poolA, poolB) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MOVE_MEMPOOL, \ + poolA, poolB, 0, 0, 0) + +/* Resize and/or move a piece associated with a memory pool. */ +#define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_CHANGE, \ + pool, addrA, addrB, size, 0) + +/* Return 1 if a mempool exists, else 0. */ +#define VALGRIND_MEMPOOL_EXISTS(pool) \ + (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ + VG_USERREQ__MEMPOOL_EXISTS, \ + pool, 0, 0, 0, 0) + +/* Mark a piece of memory as being a stack. Returns a stack id. + start is the lowest addressable stack byte, end is the highest + addressable stack byte. */ +#define VALGRIND_STACK_REGISTER(start, end) \ + (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ + VG_USERREQ__STACK_REGISTER, \ + start, end, 0, 0, 0) + +/* Unmark the piece of memory associated with a stack id as being a + stack. */ +#define VALGRIND_STACK_DEREGISTER(id) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_DEREGISTER, \ + id, 0, 0, 0, 0) + +/* Change the start and end address of the stack id. + start is the new lowest addressable stack byte, end is the new highest + addressable stack byte. */ +#define VALGRIND_STACK_CHANGE(id, start, end) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_CHANGE, \ + id, start, end, 0, 0) + +/* Load PDB debug info for Wine PE image_map. */ +#define VALGRIND_LOAD_PDB_DEBUGINFO(fd, ptr, total_size, delta) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__LOAD_PDB_DEBUGINFO, \ + fd, ptr, total_size, delta, 0) + +/* Map a code address to a source file name and line number. buf64 + must point to a 64-byte buffer in the caller's address space. The + result will be dumped in there and is guaranteed to be zero + terminated. If no info is found, the first byte is set to zero. */ +#define VALGRIND_MAP_IP_TO_SRCLOC(addr, buf64) \ + (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ + VG_USERREQ__MAP_IP_TO_SRCLOC, \ + addr, buf64, 0, 0, 0) + +/* Disable error reporting for this thread. Behaves in a stack like + way, so you can safely call this multiple times provided that + VALGRIND_ENABLE_ERROR_REPORTING is called the same number of times + to re-enable reporting. The first call of this macro disables + reporting. Subsequent calls have no effect except to increase the + number of VALGRIND_ENABLE_ERROR_REPORTING calls needed to re-enable + reporting. Child threads do not inherit this setting from their + parents -- they are always created with reporting enabled. */ +#define VALGRIND_DISABLE_ERROR_REPORTING \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \ + 1, 0, 0, 0, 0) + +/* Re-enable error reporting, as per comments on + VALGRIND_DISABLE_ERROR_REPORTING. */ +#define VALGRIND_ENABLE_ERROR_REPORTING \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \ + -1, 0, 0, 0, 0) + +/* Execute a monitor command from the client program. + If a connection is opened with GDB, the output will be sent + according to the output mode set for vgdb. + If no connection is opened, output will go to the log output. + Returns 1 if command not recognised, 0 otherwise. */ +#define VALGRIND_MONITOR_COMMAND(command) \ + VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__GDB_MONITOR_COMMAND, \ + command, 0, 0, 0, 0) + + +#undef PLAT_x86_darwin +#undef PLAT_amd64_darwin +#undef PLAT_x86_win32 +#undef PLAT_amd64_win64 +#undef PLAT_x86_linux +#undef PLAT_amd64_linux +#undef PLAT_ppc32_linux +#undef PLAT_ppc64be_linux +#undef PLAT_ppc64le_linux +#undef PLAT_arm_linux +#undef PLAT_s390x_linux +#undef PLAT_mips32_linux +#undef PLAT_mips64_linux + +#endif /* __VALGRIND_H */ diff --git a/po/POTFILES.in b/po/POTFILES.in index bec15638..358d39c7 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,3 +1,4 @@ # List of source files which contain translatable strings. src/log/normal.c src/string/i18n.c +src/core/runner.c diff --git a/po/fr.po b/po/fr.po index d9b7f118..1fe53b1d 100644 --- a/po/fr.po +++ b/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: criterion 2.0.0\n" "Report-Msgid-Bugs-To: franklinmathieu+criterion@gmail.com\n" -"POT-Creation-Date: 2015-09-16 21:18+0200\n" +"POT-Creation-Date: 2015-09-26 00:02+0200\n" "PO-Revision-Date: 2015-04-03 17:58+0200\n" "Last-Translator: <franklinmathieu@gmail.com>\n" "Language-Team: French\n" @@ -174,3 +174,25 @@ msgstr "L'instruction `%1$s` a levé une instance de l'exception `%2$s`." #, c-format msgid "The statement `%1$s` did not throw an instance of the `%2$s` exception." msgstr "L'instruction `%1$s` n'a pas levé d'instance de l'exception `%2$s`." + +#: src/core/runner.c:54 +#, c-format +msgid "" +"%1$sWarning! Criterion has detected that it is running under valgrind, but " +"the no_early_exit option is explicitely disabled. Reports will not be " +"accurate!%2$s\n" +msgstr "" +"%1$sAttention! Criterion a détecté qu'il a été lancé avec valgrind, mais " +"l'option no_early_exit est explicitement désactivée. Les rapports d'erreur " +"ne seront pas précis!%2$s\n" + +#: src/core/runner.c:58 +#, c-format +msgid "" +"%1$sWarning! Criterion has detected that it is running under valgrind, but " +"the number of jobs have been explicitely set. Reports might appear confusing!" +"%2$s\n" +msgstr "" +"%1$sAttention! Criterion a détecté qu'il a été lancé avec valgrind, mais " +"le nombre de tâches est explicitement défini. Les rapports d'erreur " +"risquent d'être déroutants!%2$s\n" diff --git a/src/core/runner.c b/src/core/runner.c index ea1a7fec..f0ae80b5 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -21,9 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ +#define CRITERION_LOGGING_COLORS #include <stdlib.h> #include <stdio.h> #include <csptr/smalloc.h> +#include <valgrind/valgrind.h> #include "criterion/criterion.h" #include "criterion/options.h" #include "criterion/ordered-set.h" @@ -46,6 +48,27 @@ #include "string/extmatch.h" #endif +typedef const char *const msg_t; + +#ifdef ENABLE_NLS +static msg_t msg_valgrind_early_exit = N_("%1$sWarning! Criterion has detected " + "that it is running under valgrind, but the no_early_exit option is " + "explicitely disabled. Reports will not be accurate!%2$s\n"); + +static msg_t msg_valgrind_jobs = N_("%1$sWarning! Criterion has detected " + "that it is running under valgrind, but the number of jobs have been " + "explicitely set. Reports might appear confusing!%2$s\n"); +#else +static msg_t msg_valgrind_early_exit = "%sWarning! Criterion has detected " + "that it is running under valgrind, but the no_early_exit option is " + "explicitely disabled. Reports will not be accurate!%s\n"; + +static msg_t msg_valgrind_jobs = "%sWarning! Criterion has detected " + "that it is running under valgrind, but the number of jobs have been " + "explicitely set. Reports might appear confusing!%s\n"; +#endif + + #ifdef _MSC_VER struct criterion_test *SECTION_START_(cr_tst); struct criterion_suite *SECTION_START_(cr_sts); @@ -312,6 +335,11 @@ void disable_unmatching(struct criterion_test_set *set) { struct criterion_test_set *criterion_initialize(void) { init_i18n(); + if (RUNNING_ON_VALGRIND) { + criterion_options.no_early_exit = 1; + criterion_options.jobs = 1; + } + if (resume_child()) // (windows only) resume from the fork exit(0); @@ -386,6 +414,15 @@ static int criterion_run_all_tests_impl(struct criterion_test_set *set) { report(PRE_ALL, set); log(pre_all, set); + if (RUNNING_ON_VALGRIND) { + if (!criterion_options.no_early_exit) + criterion_pimportant(CRITERION_PREFIX_DASHES, + _(msg_valgrind_early_exit), FG_BOLD, RESET); + if (criterion_options.jobs != 1) + criterion_pimportant(CRITERION_PREFIX_DASHES, + _(msg_valgrind_jobs), FG_BOLD, RESET); + } + fflush(NULL); // flush everything before forking g_worker_pipe = stdpipe(); diff --git a/src/entry/main.c b/src/entry/main.c index 6fb07879..ee1d2e5d 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -144,24 +144,41 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { {0, 0, 0, 0 } }; - bool use_ascii = !strcmp("1", DEF(getenv("CRITERION_USE_ASCII"), "0")) - || !strcmp("dumb", DEF(getenv("TERM"), "dumb")); - setlocale(LC_ALL, ""); #if ENABLE_NLS textdomain (PACKAGE "-test"); #endif + char *env_always_succeed = getenv("CRITERION_ALWAYS_SUCCEED"); + char *env_no_early_exit = getenv("CRITERION_NO_EARLY_EXIT"); + char *env_fail_fast = getenv("CRITERION_FAIL_FAST"); + char *env_use_ascii = getenv("CRITERION_USE_ASCII"); + char *env_jobs = getenv("CRITERION_JOBS"); + char *env_logging_threshold = getenv("CRITERION_VERBOSITY_LEVEL"); + char *env_short_filename = getenv("CRITERION_SHORT_FILENAME"); + + bool is_term_dumb = !strcmp("dumb", DEF(getenv("TERM"), "dumb")); + struct criterion_options *opt = &criterion_options; - opt->always_succeed = !strcmp("1", DEF(getenv("CRITERION_ALWAYS_SUCCEED"), "0")); - opt->no_early_exit = !strcmp("1", DEF(getenv("CRITERION_NO_EARLY_EXIT") , "0")); - opt->fail_fast = !strcmp("1", DEF(getenv("CRITERION_FAIL_FAST") , "0")); - opt->use_ascii = use_ascii; - opt->jobs = atou(DEF(getenv("CRITERION_JOBS"), "0")); - opt->logging_threshold = atou(DEF(getenv("CRITERION_VERBOSITY_LEVEL"), "2")); - opt->short_filename = !strcmp("1", DEF(getenv("CRITERION_SHORT_FILENAME"), "0")); + if (env_always_succeed) + opt->always_succeed = !strcmp("1", env_always_succeed); + if (env_no_early_exit) + opt->no_early_exit = !strcmp("1", env_no_early_exit); + if (env_fail_fast) + opt->fail_fast = !strcmp("1", env_fail_fast); + if (env_use_ascii) + opt->use_ascii = !strcmp("1", env_use_ascii) || is_term_dumb; + if (env_jobs) + opt->jobs = atou(env_jobs); + if (env_logging_threshold) + opt->logging_threshold = atou(env_logging_threshold); + if (env_short_filename) + opt->short_filename = !strcmp("1", env_short_filename); + #ifdef HAVE_PCRE - opt->pattern = getenv("CRITERION_TEST_PATTERN"); + char *env_pattern = getenv("CRITERION_TEST_PATTERN"); + if (env_pattern) + opt->pattern = env_pattern; #endif bool use_tap = !strcmp("1", DEF(getenv("CRITERION_ENABLE_TAP"), "0")); From 6110f43d87f631dbe87a9d3e1def90baf700e84c Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 26 Sep 2015 00:31:57 +0200 Subject: [PATCH 037/211] Added regression tests on theories --- samples/outputs/theories.c.bin.err.expected | 21 ++++++++++++++++++++ samples/outputs/theories.c.bin.out.expected | 0 samples/outputs/theories.cc.bin.err.expected | 21 ++++++++++++++++++++ samples/outputs/theories.cc.bin.out.expected | 0 4 files changed, 42 insertions(+) create mode 100644 samples/outputs/theories.c.bin.err.expected create mode 100644 samples/outputs/theories.c.bin.out.expected create mode 100644 samples/outputs/theories.cc.bin.err.expected create mode 100644 samples/outputs/theories.cc.bin.out.expected diff --git a/samples/outputs/theories.c.bin.err.expected b/samples/outputs/theories.c.bin.err.expected new file mode 100644 index 00000000..f9937c1e --- /dev/null +++ b/samples/outputs/theories.c.bin.err.expected @@ -0,0 +1,21 @@ +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m27[0m: Assertion failed: The expression (a) == (bad_div(bad_mul(a, b), b)) is false. +[[0;34m----[0m] Theory algebra::bad_divide_is_inverse_of_multiply failed with the following parameters: (2147483647, 2) +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m27[0m: Assertion failed: The expression (a) == (bad_div(bad_mul(a, b), b)) is false. +[[0;34m----[0m] Theory algebra::bad_divide_is_inverse_of_multiply failed with the following parameters: (-2147483648, 2) +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m27[0m: Unexpected signal caught below this line! +[[0;31mFAIL[0m] algebra::bad_divide_is_inverse_of_multiply: CRASH! +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m120[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m120[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m120[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m120[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m120[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) +[[0;31mFAIL[0m] theory::gen: (0.00s) +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m103[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 1l, 1l, 3.14f, 3.14, "test", "other test", 0x604698) +[[0;31mFAIL[0m] theory::misc: (0.00s) +[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m6[0;1m | Passing: [0;32m3[0;1m | Failing: [0;31m3[0;1m | Crashing: [0;31m1[0;1m [0m diff --git a/samples/outputs/theories.c.bin.out.expected b/samples/outputs/theories.c.bin.out.expected new file mode 100644 index 00000000..e69de29b diff --git a/samples/outputs/theories.cc.bin.err.expected b/samples/outputs/theories.cc.bin.err.expected new file mode 100644 index 00000000..c35d60c4 --- /dev/null +++ b/samples/outputs/theories.cc.bin.err.expected @@ -0,0 +1,21 @@ +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m31[0m: Assertion failed: The expression (a) == (bad_div(bad_mul(a, b), b)) is false. +[[0;34m----[0m] Theory algebra::bad_divide_is_inverse_of_multiply failed with the following parameters: (2147483647, 2) +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m31[0m: Assertion failed: The expression (a) == (bad_div(bad_mul(a, b), b)) is false. +[[0;34m----[0m] Theory algebra::bad_divide_is_inverse_of_multiply failed with the following parameters: (-2147483648, 2) +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m31[0m: Unexpected signal caught below this line! +[[0;31mFAIL[0m] algebra::bad_divide_is_inverse_of_multiply: CRASH! +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m128[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m128[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m128[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m128[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m128[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) +[[0;31mFAIL[0m] theory::gen: (0.00s) +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m111[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 1l, 1l, 3.14f, 3.14, "test", "other test", 0x605480) +[[0;31mFAIL[0m] theory::misc: (0.00s) +[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m6[0;1m | Passing: [0;32m3[0;1m | Failing: [0;31m3[0;1m | Crashing: [0;31m1[0;1m [0m diff --git a/samples/outputs/theories.cc.bin.out.expected b/samples/outputs/theories.cc.bin.out.expected new file mode 100644 index 00000000..e69de29b From 4cc826eae345063803466f1254648ca46adb2101 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 26 Sep 2015 00:36:51 +0200 Subject: [PATCH 038/211] Removed theory parameter printing from sample & regression test --- samples/outputs/theories.c.bin.err.expected | 15 ++++++--------- samples/outputs/theories.cc.bin.err.expected | 15 ++++++--------- samples/theories.c | 3 --- samples/theories.cc | 3 --- 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/samples/outputs/theories.c.bin.err.expected b/samples/outputs/theories.c.bin.err.expected index f9937c1e..95b4603c 100644 --- a/samples/outputs/theories.c.bin.err.expected +++ b/samples/outputs/theories.c.bin.err.expected @@ -4,18 +4,15 @@ [[0;34m----[0m] Theory algebra::bad_divide_is_inverse_of_multiply failed with the following parameters: (-2147483648, 2) [[0;34m----[0m] [0;1mtheories.c[0m:[0;31m27[0m: Unexpected signal caught below this line! [[0;31mFAIL[0m] algebra::bad_divide_is_inverse_of_multiply: CRASH! -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m120[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m117[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m120[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m117[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m120[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m117[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m120[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m117[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m120[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m117[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) [[0;31mFAIL[0m] theory::gen: (0.00s) -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m103[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 1l, 1l, 3.14f, 3.14, "test", "other test", 0x604698) -[[0;31mFAIL[0m] theory::misc: (0.00s) -[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m6[0;1m | Passing: [0;32m3[0;1m | Failing: [0;31m3[0;1m | Crashing: [0;31m1[0;1m [0m +[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m6[0;1m | Passing: [0;32m4[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m1[0;1m [0m diff --git a/samples/outputs/theories.cc.bin.err.expected b/samples/outputs/theories.cc.bin.err.expected index c35d60c4..bc647a1b 100644 --- a/samples/outputs/theories.cc.bin.err.expected +++ b/samples/outputs/theories.cc.bin.err.expected @@ -4,18 +4,15 @@ [[0;34m----[0m] Theory algebra::bad_divide_is_inverse_of_multiply failed with the following parameters: (-2147483648, 2) [[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m31[0m: Unexpected signal caught below this line! [[0;31mFAIL[0m] algebra::bad_divide_is_inverse_of_multiply: CRASH! -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m128[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m125[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m128[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m125[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m128[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m125[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m128[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m125[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m128[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m125[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) [[0;31mFAIL[0m] theory::gen: (0.00s) -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m111[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 1l, 1l, 3.14f, 3.14, "test", "other test", 0x605480) -[[0;31mFAIL[0m] theory::misc: (0.00s) -[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m6[0;1m | Passing: [0;32m3[0;1m | Failing: [0;31m3[0;1m | Crashing: [0;31m1[0;1m [0m +[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m6[0;1m | Passing: [0;32m4[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m1[0;1m [0m diff --git a/samples/theories.c b/samples/theories.c index 0bbe7cc2..b4ca6d26 100644 --- a/samples/theories.c +++ b/samples/theories.c @@ -98,9 +98,6 @@ Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, cr_assert_str_eq(str, "test"); cr_assert_str_eq(cstr, "other test"); cr_assert_eq(obj->foo, 42); - - // abort to see the formatted string of all parameters - cr_assert_fail(); } // Manually generate datapoints diff --git a/samples/theories.cc b/samples/theories.cc index 56027542..23c0ebc5 100644 --- a/samples/theories.cc +++ b/samples/theories.cc @@ -106,9 +106,6 @@ Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, cr_assert_str_eq(str, "test"); cr_assert_str_eq(cstr, "other test"); cr_assert_eq(obj->foo, 42); - - // abort to see the formatted string of all parameters - cr_assert_fail(); } // Manually generate datapoints From 5ffd88301573080ca8441e1effcba9ab9a757094 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 26 Sep 2015 01:33:14 +0200 Subject: [PATCH 039/211] Fixed inconsistent message strings for failed theories --- src/log/normal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/log/normal.c b/src/log/normal.c index 834c1827..3bb0c418 100644 --- a/src/log/normal.c +++ b/src/log/normal.c @@ -77,7 +77,7 @@ static msg_t msg_post_test = "%s::%s\n"; static msg_t msg_post_suite_test = "%s::%s: Test is disabled\n"; static msg_t msg_post_suite_suite = "%s::%s: Suite is disabled\n"; static msg_t msg_assert_fail = "%s%s%s:%s%d%s: Assertion failed: %s\n"; -static msg_t msg_theory_fail = " Theory %s::%s failed with the following parameters: %s\n"; +static msg_t msg_theory_fail = " Theory %s::%s failed with the following parameters: (%s)\n"; static msg_t msg_test_timeout = "%s::%s: Timed out. (%3.2fs)\n"; static msg_t msg_test_crash_line = "%s%s%s:%s%u%s: Unexpected signal caught below this line!\n"; static msg_t msg_test_crash = "%s::%s: CRASH!\n"; From 974b7d039337e382e61bdc523fbd6dac635093d3 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 26 Sep 2015 01:37:36 +0200 Subject: [PATCH 040/211] Revert "Removed theory parameter printing from sample & regression test" & "Added regression tests on theories" This reverts commits 4cc826eae345063803466f1254648ca46adb2101 and 6110f43d87f631dbe87a9d3e1def90baf700e84c. Regression tests cannot be done on the two theory samples, as they both illustrate the consequences of testing against undefined behaviour. A full-fledged internal test should be set up in ./samples/tests for this purpose. --- samples/outputs/theories.c.bin.err.expected | 18 ------------------ samples/outputs/theories.c.bin.out.expected | 0 samples/outputs/theories.cc.bin.err.expected | 18 ------------------ samples/outputs/theories.cc.bin.out.expected | 0 samples/theories.c | 3 +++ samples/theories.cc | 3 +++ 6 files changed, 6 insertions(+), 36 deletions(-) delete mode 100644 samples/outputs/theories.c.bin.err.expected delete mode 100644 samples/outputs/theories.c.bin.out.expected delete mode 100644 samples/outputs/theories.cc.bin.err.expected delete mode 100644 samples/outputs/theories.cc.bin.out.expected diff --git a/samples/outputs/theories.c.bin.err.expected b/samples/outputs/theories.c.bin.err.expected deleted file mode 100644 index 95b4603c..00000000 --- a/samples/outputs/theories.c.bin.err.expected +++ /dev/null @@ -1,18 +0,0 @@ -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m27[0m: Assertion failed: The expression (a) == (bad_div(bad_mul(a, b), b)) is false. -[[0;34m----[0m] Theory algebra::bad_divide_is_inverse_of_multiply failed with the following parameters: (2147483647, 2) -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m27[0m: Assertion failed: The expression (a) == (bad_div(bad_mul(a, b), b)) is false. -[[0;34m----[0m] Theory algebra::bad_divide_is_inverse_of_multiply failed with the following parameters: (-2147483648, 2) -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m27[0m: Unexpected signal caught below this line! -[[0;31mFAIL[0m] algebra::bad_divide_is_inverse_of_multiply: CRASH! -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m117[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m117[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m117[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m117[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) -[[0;34m----[0m] [0;1mtheories.c[0m:[0;31m117[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) -[[0;31mFAIL[0m] theory::gen: (0.00s) -[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m6[0;1m | Passing: [0;32m4[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m1[0;1m [0m diff --git a/samples/outputs/theories.c.bin.out.expected b/samples/outputs/theories.c.bin.out.expected deleted file mode 100644 index e69de29b..00000000 diff --git a/samples/outputs/theories.cc.bin.err.expected b/samples/outputs/theories.cc.bin.err.expected deleted file mode 100644 index bc647a1b..00000000 --- a/samples/outputs/theories.cc.bin.err.expected +++ /dev/null @@ -1,18 +0,0 @@ -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m31[0m: Assertion failed: The expression (a) == (bad_div(bad_mul(a, b), b)) is false. -[[0;34m----[0m] Theory algebra::bad_divide_is_inverse_of_multiply failed with the following parameters: (2147483647, 2) -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m31[0m: Assertion failed: The expression (a) == (bad_div(bad_mul(a, b), b)) is false. -[[0;34m----[0m] Theory algebra::bad_divide_is_inverse_of_multiply failed with the following parameters: (-2147483648, 2) -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m31[0m: Unexpected signal caught below this line! -[[0;31mFAIL[0m] algebra::bad_divide_is_inverse_of_multiply: CRASH! -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m125[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m125[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m125[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m125[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) -[[0;34m----[0m] [0;1mtheories.cc[0m:[0;31m125[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) -[[0;31mFAIL[0m] theory::gen: (0.00s) -[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m6[0;1m | Passing: [0;32m4[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m1[0;1m [0m diff --git a/samples/outputs/theories.cc.bin.out.expected b/samples/outputs/theories.cc.bin.out.expected deleted file mode 100644 index e69de29b..00000000 diff --git a/samples/theories.c b/samples/theories.c index b4ca6d26..0bbe7cc2 100644 --- a/samples/theories.c +++ b/samples/theories.c @@ -98,6 +98,9 @@ Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, cr_assert_str_eq(str, "test"); cr_assert_str_eq(cstr, "other test"); cr_assert_eq(obj->foo, 42); + + // abort to see the formatted string of all parameters + cr_assert_fail(); } // Manually generate datapoints diff --git a/samples/theories.cc b/samples/theories.cc index 23c0ebc5..56027542 100644 --- a/samples/theories.cc +++ b/samples/theories.cc @@ -106,6 +106,9 @@ Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, cr_assert_str_eq(str, "test"); cr_assert_str_eq(cstr, "other test"); cr_assert_eq(obj->foo, 42); + + // abort to see the formatted string of all parameters + cr_assert_fail(); } // Manually generate datapoints From c546bcef5ca93971214398dd3bdd16cd59756be6 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 26 Sep 2015 17:02:28 +0200 Subject: [PATCH 041/211] Added valgrind error suppression for the runner process --- CMakeLists.txt | 7 ++++++- src/config.h.in | 1 + src/core/runner.c | 11 +++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d3c65a70..09923a39 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,9 +51,14 @@ endif() # Setup coveralls -option(CTESTS "Turn on the samples and test" OFF) option(COVERALLS "Turn on coveralls support" OFF) option(COVERALLS_UPLOAD "Upload the generated coveralls json" ON) +option(DEV_BUILD "Compile in developer mode" OFF) +option(CTESTS "Turn on the samples and test" ${DEV_BUILD}) + +if (DEV_BUILD) + set(ENABLE_VALGRIND_ERRORS 1) +endif () if (COVERALLS) include(Coveralls) diff --git a/src/config.h.in b/src/config.h.in index 5928b0bd..fef0a5c9 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -3,6 +3,7 @@ #cmakedefine ENABLE_NLS @ENABLE_NLS@ #cmakedefine HAVE_PCRE @HAVE_PCRE@ +#cmakedefine ENABLE_VALGRIND_ERRORS @ENABLE_VALGRIND_ERRORS@ # define LOCALEDIR "${LOCALEDIR}" # define PACKAGE "${PROJECT_NAME}" diff --git a/src/core/runner.c b/src/core/runner.c index f0ae80b5..92fdb5f8 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -158,6 +158,10 @@ struct criterion_test_set *criterion_init(void) { void run_test_child(struct criterion_test *test, struct criterion_suite *suite) { +#ifndef ENABLE_VALGRIND_ERRORS + VALGRIND_ENABLE_ERROR_REPORTING; +#endif + if (suite->data && suite->data->timeout != 0 && test->data->timeout == 0) setup_timeout((uint64_t) (suite->data->timeout * 1e9)); else if (test->data->timeout != 0) @@ -335,6 +339,9 @@ void disable_unmatching(struct criterion_test_set *set) { struct criterion_test_set *criterion_initialize(void) { init_i18n(); +#ifndef ENABLE_VALGRIND_ERRORS + VALGRIND_DISABLE_ERROR_REPORTING; +#endif if (RUNNING_ON_VALGRIND) { criterion_options.no_early_exit = 1; criterion_options.jobs = 1; @@ -348,6 +355,10 @@ struct criterion_test_set *criterion_initialize(void) { void criterion_finalize(struct criterion_test_set *set) { sfree(set); + +#ifndef ENABLE_VALGRIND_ERRORS + VALGRIND_ENABLE_ERROR_REPORTING; +#endif } static void run_tests_async(struct criterion_test_set *set, From 49106f491610fc34c1b60f56f60eb3176349caa7 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 26 Sep 2015 17:36:39 +0200 Subject: [PATCH 042/211] Made child processes finalize and exit before returning from criterion_run_all_tests --- src/core/runner.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/runner.c b/src/core/runner.c index ea1a7fec..cd9c7967 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -419,5 +419,10 @@ int criterion_run_all_tests(struct criterion_test_set *set) { int res = criterion_run_all_tests_impl(set); unset_runner_process(); + if (res == -1) { + criterion_finalize(set); + exit(0); + } + return criterion_options.always_succeed || res; } From f1dfff5756378d775fc6523a08ef3461811accc3 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 26 Sep 2015 18:48:15 +0200 Subject: [PATCH 043/211] Abort the runner when failing in the middle of reading an event --- src/io/event.c | 53 +++++++++++++++++++++----------------------------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/src/io/event.c b/src/io/event.c index 4760020d..8bb6a95b 100644 --- a/src/io/event.c +++ b/src/io/event.c @@ -44,14 +44,24 @@ void destroy_assert_event(void *ptr, UNUSED void *meta) { free(ev->data); } +#ifdef __GNUC__ +# define unlikely(x) __builtin_expect((x),0) +#else +# define unlikely(x) (x) +#endif + +#define ASSERT(Cond) \ + do { \ + if (unlikely(Cond)) \ + abort(); \ + } while (0) + struct event *read_event(FILE *f) { unsigned kind; - if (fread(&kind, sizeof (unsigned), 1, f) == 0) - return NULL; + ASSERT(fread(&kind, sizeof (unsigned), 1, f) == 0); unsigned long long pid; - if (fread(&pid, sizeof (unsigned long long), 1, f) == 0) - return NULL; + ASSERT(fread(&pid, sizeof (unsigned long long), 1, f) == 0); switch (kind) { case ASSERT: { @@ -60,16 +70,13 @@ struct event *read_event(FILE *f) { char *msg = NULL; buf = malloc(assert_size); - if (fread(buf, assert_size, 1, f) == 0) - goto fail_assert; + ASSERT(fread(buf, assert_size, 1, f) == 0); size_t len = 0; - if (fread(&len, sizeof (size_t), 1, f) == 0) - goto fail_assert; + ASSERT(fread(&len, sizeof (size_t), 1, f) == 0); msg = malloc(len); - if (fread(msg, len, 1, f) == 0) - goto fail_assert; + ASSERT(fread(msg, len, 1, f) == 0); buf->message = msg; @@ -79,22 +86,13 @@ struct event *read_event(FILE *f) { ); *ev = (struct event) { .pid = pid, .kind = kind, .data = buf }; return ev; - -fail_assert: - free(buf); - free(msg); - return NULL; } case THEORY_FAIL: { size_t len = 0; - if (fread(&len, sizeof (size_t), 1, f) == 0) - return NULL; + ASSERT(fread(&len, sizeof (size_t), 1, f) == 0); char *buf = malloc(len); - if (fread(buf, len, 1, f) == 0) { - free(buf); - return NULL; - } + ASSERT(fread(buf, len, 1, f) == 0); struct event *ev = smalloc( .size = sizeof (struct event), @@ -105,10 +103,7 @@ struct event *read_event(FILE *f) { } case POST_TEST: { double *elapsed_time = malloc(sizeof (double)); - if (fread(elapsed_time, sizeof (double), 1, f) == 0) { - free(elapsed_time); - return NULL; - } + ASSERT(fread(elapsed_time, sizeof (double), 1, f) == 0); struct event *ev = smalloc( .size = sizeof (struct event), @@ -119,10 +114,7 @@ struct event *read_event(FILE *f) { } case WORKER_TERMINATED: { struct worker_status *status = malloc(sizeof (struct worker_status)); - if (fread(status, sizeof (struct worker_status), 1, f) == 0) { - free(status); - return NULL; - } + ASSERT(fread(status, sizeof (struct worker_status), 1, f) == 0); struct event *ev = smalloc( .size = sizeof (struct event), @@ -146,8 +138,7 @@ void send_event(int kind, void *data, size_t size) { memcpy(buf, &kind, sizeof (int)); memcpy(buf + sizeof (int), &pid, sizeof (pid)); memcpy(buf + sizeof (int) + sizeof (pid), data, size); - if (fwrite(buf, sizeof (int) + sizeof (pid) + size, 1, g_event_pipe) == 0) - abort(); + ASSERT(fwrite(buf, sizeof (int) + sizeof (pid) + size, 1, g_event_pipe) == 0); free(buf); } From 3fb26eb5056204bc4c45125f6522558e70ed8130 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 27 Sep 2015 01:20:27 +0200 Subject: [PATCH 044/211] [Issue #58] Switched event pipe IO to use native read/write syscalls --- src/compat/pipe-internal.h | 8 +++ src/compat/pipe.c | 129 +++++++++++++++++++++++++++++++++++++ src/compat/pipe.h | 9 +++ src/core/runner.c | 4 +- src/core/worker.c | 10 +-- src/core/worker.h | 4 +- src/io/event.c | 24 +++---- src/io/event.h | 4 +- 8 files changed, 169 insertions(+), 23 deletions(-) diff --git a/src/compat/pipe-internal.h b/src/compat/pipe-internal.h index 54a52422..17f114f3 100644 --- a/src/compat/pipe-internal.h +++ b/src/compat/pipe-internal.h @@ -35,4 +35,12 @@ struct pipe_handle { #endif }; +struct pipe_file_handle { +#ifdef VANILLA_WIN32 + HANDLE fh; +#else + int fd; +#endif +}; + #endif /* !PIPE_INTERNAL_H_ */ diff --git a/src/compat/pipe.c b/src/compat/pipe.c index 39167d97..23c4b4a7 100644 --- a/src/compat/pipe.c +++ b/src/compat/pipe.c @@ -182,6 +182,135 @@ void pipe_std_redirect(s_pipe_handle *pipe, enum criterion_std_fd fd) { #endif } +void close_pipe_file_handle(void *ptr, UNUSED void *meta) { + s_pipe_file_handle *h = ptr; +#ifdef VANILLA_WIN32 + CloseHandle(h->fh); +#else + close(h->fd); +#endif +} + +#ifdef VANILLA_WIN32 +static HANDLE win_dup(HANDLE h) { + HANDLE dup; + DuplicateHandle(GetCurrentProcess(), + h, + GetCurrentProcess(), + &dup, + 0, + TRUE, + DUPLICATE_SAME_ACCESS); + return dup; +} +#endif + +s_pipe_file_handle *pipe_out_handle(s_pipe_handle *p, enum pipe_opt opts) { +#ifdef VANILLA_WIN32 + if (opts & PIPE_CLOSE) + CloseHandle(p->fhs[0]); + HANDLE fh = p->fhs[1]; + if (opts & PIPE_DUP) + fh = win_dup(fh); + + s_pipe_file_handle *h = smalloc( + .size = sizeof (s_pipe_file_handle), + .dtor = close_pipe_file_handle); + + h->fh = fh; + return h; +#else + if (opts & PIPE_CLOSE) + close(p->fds[0]); + int fd = p->fds[1]; + if (opts & PIPE_DUP) + fd = dup(fd); + + s_pipe_file_handle *h = smalloc( + .size = sizeof (s_pipe_file_handle), + .dtor = close_pipe_file_handle); + + h->fd = fd; + return h; +#endif +} + +s_pipe_file_handle *pipe_in_handle(s_pipe_handle *p, enum pipe_opt opts) { +#ifdef VANILLA_WIN32 + if (opts & PIPE_CLOSE) + CloseHandle(p->fhs[1]); + HANDLE fh = p->fhs[0]; + if (opts & PIPE_DUP) + fh = win_dup(fh); + + s_pipe_file_handle *h = smalloc( + .size = sizeof (s_pipe_file_handle), + .dtor = close_pipe_file_handle); + + h->fh = fh; + return h; +#else + if (opts & PIPE_CLOSE) + close(p->fds[1]); + int fd = p->fds[0]; + if (opts & PIPE_DUP) + fd = dup(fd); + + s_pipe_file_handle *h = smalloc( + .size = sizeof (s_pipe_file_handle), + .dtor = close_pipe_file_handle); + + h->fd = fd; + return h; +#endif +} + +int pipe_write(const void *buf, size_t size, s_pipe_file_handle *pipe) { +#ifdef VANILLA_WIN32 + DWORD written = 0; + size_t off = 0; + while (size > 0) { + if (!WriteFile(pipe->fh, (const char *) buf + off, size, &written, NULL)) + return -1; + size -= written; + off += written; + } + if (off > 0) + return 1; + return 0; +#else + ssize_t res = write(pipe->fd, buf, size); + if (res < 0) + return -1; + if (res > 0) + return 1; + return 0; +#endif +} + +int pipe_read(void *buf, size_t size, s_pipe_file_handle *pipe) { +#ifdef VANILLA_WIN32 + DWORD read = 0; + size_t off = 0; + while (size > 0) { + if (!ReadFile(pipe->fh, (char *) buf + off, size, &read, NULL)) + return -1; + size -= read; + off += read; + } + if (off > 0) + return 1; + return 0; +#else + ssize_t res = read(pipe->fd, buf, size); + if (res < 0) + return -1; + if (res > 0) + return 1; + return 0; +#endif +} + static s_pipe_handle stdout_redir_; static s_pipe_handle stderr_redir_; static s_pipe_handle stdin_redir_; diff --git a/src/compat/pipe.h b/src/compat/pipe.h index c2f7d13a..148bb1e8 100644 --- a/src/compat/pipe.h +++ b/src/compat/pipe.h @@ -31,6 +31,9 @@ struct pipe_handle; typedef struct pipe_handle s_pipe_handle; +struct pipe_file_handle; +typedef struct pipe_file_handle s_pipe_file_handle; + enum pipe_end { PIPE_READ = 0, PIPE_WRITE = 1, @@ -51,9 +54,15 @@ s_pipe_handle *stdpipe(); FILE *pipe_in(s_pipe_handle *p, enum pipe_opt opts); FILE *pipe_out(s_pipe_handle *p, enum pipe_opt opts); +s_pipe_file_handle *pipe_out_handle(s_pipe_handle *p, enum pipe_opt opts); +s_pipe_file_handle *pipe_in_handle(s_pipe_handle *p, enum pipe_opt opts); + int stdpipe_options(s_pipe_handle *pipe, int id, int noblock); void pipe_std_redirect(s_pipe_handle *pipe, enum criterion_std_fd fd); +int pipe_write(const void *buf, size_t size, s_pipe_file_handle *pipe); +int pipe_read(void *buf, size_t size, s_pipe_file_handle *pipe); + INLINE FILE* get_std_file(enum criterion_std_fd fd_kind) { switch (fd_kind) { case CR_STDIN: return stdin; diff --git a/src/core/runner.c b/src/core/runner.c index cd9c7967..68148dcd 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -335,7 +335,7 @@ static void run_tests_async(struct criterion_test_set *set, size_t active_workers = 0; - FILE *event_pipe = pipe_in(g_worker_pipe, PIPE_DUP); + s_pipe_file_handle *event_pipe = pipe_in_handle(g_worker_pipe, PIPE_DUP); struct event *ev = NULL; // initialization of coroutine @@ -374,7 +374,7 @@ static void run_tests_async(struct criterion_test_set *set, ev = NULL; cleanup: - fclose(event_pipe); + sfree(event_pipe); sfree(ev); for (size_t i = 0; i < nb_workers; ++i) sfree(workers.workers[i]); diff --git a/src/core/worker.c b/src/core/worker.c index 8912b193..bbc26df8 100644 --- a/src/core/worker.c +++ b/src/core/worker.c @@ -48,14 +48,14 @@ bool is_runner(void) { static void close_process(void *ptr, UNUSED void *meta) { struct worker *proc = ptr; - fclose(proc->in); + sfree(proc->in); sfree(proc->ctx.suite_stats); sfree(proc->ctx.test_stats); sfree(proc->ctx.stats); sfree(proc->proc); } -struct event *worker_read_event(struct worker_set *workers, FILE *pipe) { +struct event *worker_read_event(struct worker_set *workers, s_pipe_file_handle *pipe) { struct event *ev = read_event(pipe); if (ev) { ev->worker_index = -1; @@ -76,10 +76,10 @@ struct event *worker_read_event(struct worker_set *workers, FILE *pipe) { void run_worker(struct worker_context *ctx) { cr_redirect_stdin(); - g_event_pipe = pipe_out(ctx->pipe, PIPE_CLOSE); + g_event_pipe = pipe_out_handle(ctx->pipe, PIPE_CLOSE); ctx->func(ctx->test, ctx->suite); - fclose(g_event_pipe); + sfree(g_event_pipe); fflush(NULL); // flush all opened streams if (criterion_options.no_early_exit) @@ -118,7 +118,7 @@ struct worker *spawn_test_worker(struct execution_context *ctx, *ptr = (struct worker) { .proc = proc, - .in = pipe_in(pipe, PIPE_DUP), + .in = pipe_in_handle(pipe, PIPE_DUP), .ctx = *ctx, }; return ptr; diff --git a/src/core/worker.h b/src/core/worker.h index 865ab966..95a6ab7f 100644 --- a/src/core/worker.h +++ b/src/core/worker.h @@ -49,7 +49,7 @@ struct execution_context { struct worker { int active; s_proc_handle *proc; - FILE *in; + s_pipe_file_handle *in; struct execution_context ctx; }; @@ -85,6 +85,6 @@ struct process_status get_status(int status); struct worker *spawn_test_worker(struct execution_context *ctx, f_worker_func func, s_pipe_handle *pipe); -struct event *worker_read_event(struct worker_set *workers, FILE *pipe); +struct event *worker_read_event(struct worker_set *workers, s_pipe_file_handle *pipe); #endif /* !PROCESS_H_ */ diff --git a/src/io/event.c b/src/io/event.c index 8bb6a95b..fd7623c5 100644 --- a/src/io/event.c +++ b/src/io/event.c @@ -31,7 +31,7 @@ #include "core/worker.h" #include "event.h" -FILE *g_event_pipe = NULL; +s_pipe_file_handle *g_event_pipe = NULL; void destroy_event(void *ptr, UNUSED void *meta) { struct event *ev = ptr; @@ -56,12 +56,12 @@ void destroy_assert_event(void *ptr, UNUSED void *meta) { abort(); \ } while (0) -struct event *read_event(FILE *f) { +struct event *read_event(s_pipe_file_handle *f) { unsigned kind; - ASSERT(fread(&kind, sizeof (unsigned), 1, f) == 0); + ASSERT(pipe_read(&kind, sizeof (unsigned), f) == 0); unsigned long long pid; - ASSERT(fread(&pid, sizeof (unsigned long long), 1, f) == 0); + ASSERT(pipe_read(&pid, sizeof (unsigned long long), f) == 0); switch (kind) { case ASSERT: { @@ -70,13 +70,13 @@ struct event *read_event(FILE *f) { char *msg = NULL; buf = malloc(assert_size); - ASSERT(fread(buf, assert_size, 1, f) == 0); + ASSERT(pipe_read(buf, assert_size, f) == 0); size_t len = 0; - ASSERT(fread(&len, sizeof (size_t), 1, f) == 0); + ASSERT(pipe_read(&len, sizeof (size_t), f) == 0); msg = malloc(len); - ASSERT(fread(msg, len, 1, f) == 0); + ASSERT(pipe_read(msg, len, f) == 0); buf->message = msg; @@ -89,10 +89,10 @@ struct event *read_event(FILE *f) { } case THEORY_FAIL: { size_t len = 0; - ASSERT(fread(&len, sizeof (size_t), 1, f) == 0); + ASSERT(pipe_read(&len, sizeof (size_t), f) == 0); char *buf = malloc(len); - ASSERT(fread(buf, len, 1, f) == 0); + ASSERT(pipe_read(buf, len, f) == 0); struct event *ev = smalloc( .size = sizeof (struct event), @@ -103,7 +103,7 @@ struct event *read_event(FILE *f) { } case POST_TEST: { double *elapsed_time = malloc(sizeof (double)); - ASSERT(fread(elapsed_time, sizeof (double), 1, f) == 0); + ASSERT(pipe_read(elapsed_time, sizeof (double), f) == 0); struct event *ev = smalloc( .size = sizeof (struct event), @@ -114,7 +114,7 @@ struct event *read_event(FILE *f) { } case WORKER_TERMINATED: { struct worker_status *status = malloc(sizeof (struct worker_status)); - ASSERT(fread(status, sizeof (struct worker_status), 1, f) == 0); + ASSERT(pipe_read(status, sizeof (struct worker_status), f) == 0); struct event *ev = smalloc( .size = sizeof (struct event), @@ -138,7 +138,7 @@ void send_event(int kind, void *data, size_t size) { memcpy(buf, &kind, sizeof (int)); memcpy(buf + sizeof (int), &pid, sizeof (pid)); memcpy(buf + sizeof (int) + sizeof (pid), data, size); - ASSERT(fwrite(buf, sizeof (int) + sizeof (pid) + size, 1, g_event_pipe) == 0); + ASSERT(pipe_write(buf, sizeof (int) + sizeof (pid) + size, g_event_pipe) == 0); free(buf); } diff --git a/src/io/event.h b/src/io/event.h index 641c9660..37818fb1 100644 --- a/src/io/event.h +++ b/src/io/event.h @@ -28,7 +28,7 @@ # include "core/worker.h" # include <stdio.h> -extern FILE *g_event_pipe; +extern s_pipe_file_handle *g_event_pipe; struct event { unsigned long long pid; @@ -43,6 +43,6 @@ enum other_event_kinds { WORKER_TERMINATED = 1 << 30, }; -struct event *read_event(FILE *f); +struct event *read_event(s_pipe_file_handle *f); #endif /* !EVENT_H_ */ From 2d016b61f9292fca50d47e740ed523a8c9c3bfda Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 27 Sep 2015 02:36:28 +0200 Subject: [PATCH 045/211] Fixed the semantics of ASSERT in event IO --- src/io/event.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/io/event.c b/src/io/event.c index fd7623c5..3820ba3f 100644 --- a/src/io/event.c +++ b/src/io/event.c @@ -50,18 +50,18 @@ void destroy_assert_event(void *ptr, UNUSED void *meta) { # define unlikely(x) (x) #endif -#define ASSERT(Cond) \ - do { \ - if (unlikely(Cond)) \ - abort(); \ +#define ASSERT(Cond) \ + do { \ + if (unlikely(!(Cond))) \ + abort(); \ } while (0) struct event *read_event(s_pipe_file_handle *f) { unsigned kind; - ASSERT(pipe_read(&kind, sizeof (unsigned), f) == 0); + ASSERT(pipe_read(&kind, sizeof (unsigned), f) == 1); unsigned long long pid; - ASSERT(pipe_read(&pid, sizeof (unsigned long long), f) == 0); + ASSERT(pipe_read(&pid, sizeof (unsigned long long), f) == 1); switch (kind) { case ASSERT: { @@ -70,13 +70,13 @@ struct event *read_event(s_pipe_file_handle *f) { char *msg = NULL; buf = malloc(assert_size); - ASSERT(pipe_read(buf, assert_size, f) == 0); + ASSERT(pipe_read(buf, assert_size, f) == 1); size_t len = 0; - ASSERT(pipe_read(&len, sizeof (size_t), f) == 0); + ASSERT(pipe_read(&len, sizeof (size_t), f) == 1); msg = malloc(len); - ASSERT(pipe_read(msg, len, f) == 0); + ASSERT(pipe_read(msg, len, f) == 1); buf->message = msg; @@ -89,10 +89,10 @@ struct event *read_event(s_pipe_file_handle *f) { } case THEORY_FAIL: { size_t len = 0; - ASSERT(pipe_read(&len, sizeof (size_t), f) == 0); + ASSERT(pipe_read(&len, sizeof (size_t), f) == 1); char *buf = malloc(len); - ASSERT(pipe_read(buf, len, f) == 0); + ASSERT(pipe_read(buf, len, f) == 1); struct event *ev = smalloc( .size = sizeof (struct event), @@ -103,7 +103,7 @@ struct event *read_event(s_pipe_file_handle *f) { } case POST_TEST: { double *elapsed_time = malloc(sizeof (double)); - ASSERT(pipe_read(elapsed_time, sizeof (double), f) == 0); + ASSERT(pipe_read(elapsed_time, sizeof (double), f) == 1); struct event *ev = smalloc( .size = sizeof (struct event), @@ -114,7 +114,7 @@ struct event *read_event(s_pipe_file_handle *f) { } case WORKER_TERMINATED: { struct worker_status *status = malloc(sizeof (struct worker_status)); - ASSERT(pipe_read(status, sizeof (struct worker_status), f) == 0); + ASSERT(pipe_read(status, sizeof (struct worker_status), f) == 1); struct event *ev = smalloc( .size = sizeof (struct event), @@ -138,7 +138,7 @@ void send_event(int kind, void *data, size_t size) { memcpy(buf, &kind, sizeof (int)); memcpy(buf + sizeof (int), &pid, sizeof (pid)); memcpy(buf + sizeof (int) + sizeof (pid), data, size); - ASSERT(pipe_write(buf, sizeof (int) + sizeof (pid) + size, g_event_pipe) == 0); + ASSERT(pipe_write(buf, sizeof (int) + sizeof (pid) + size, g_event_pipe) == 1); free(buf); } From 0b38972f4dd14f4a59bfdd161bffba5fb622942a Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 27 Sep 2015 12:26:01 +0200 Subject: [PATCH 046/211] Used suggested string format from generated POT file --- po/fr.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/fr.po b/po/fr.po index 1fe53b1d..92ad06ab 100644 --- a/po/fr.po +++ b/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: criterion 2.0.0\n" "Report-Msgid-Bugs-To: franklinmathieu+criterion@gmail.com\n" -"POT-Creation-Date: 2015-09-26 00:02+0200\n" +"POT-Creation-Date: 2015-09-27 12:24+0200\n" "PO-Revision-Date: 2015-04-03 17:58+0200\n" "Last-Translator: <franklinmathieu@gmail.com>\n" "Language-Team: French\n" @@ -193,6 +193,6 @@ msgid "" "the number of jobs have been explicitely set. Reports might appear confusing!" "%2$s\n" msgstr "" -"%1$sAttention! Criterion a détecté qu'il a été lancé avec valgrind, mais " -"le nombre de tâches est explicitement défini. Les rapports d'erreur " -"risquent d'être déroutants!%2$s\n" +"%1$sAttention! Criterion a détecté qu'il a été lancé avec valgrind, mais le " +"nombre de tâches est explicitement défini. Les rapports d'erreur risquent " +"d'être déroutants!%2$s\n" From 906fec94446aa363bf9e0a6897e6aedfa4773a90 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 27 Sep 2015 13:59:40 +0200 Subject: [PATCH 047/211] Added parallel building and testing to speed up builds --- .travis.yml | 5 ++--- appveyor.yml | 7 +++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 621b5a15..48b11f03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,9 +35,8 @@ script: -DCMAKE_BUILD_TYPE=${CONFIGURATION} -DCMAKE_INSTALL_PREFIX=criterion-${TRAVIS_TAG} .. - - make - - make criterion_tests - - make test + - cmake --build . --target criterion_tests -- -j4 + - ctest -j4 after_success: - make gcov diff --git a/appveyor.yml b/appveyor.yml index 1f71d410..318deb8c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -15,8 +15,11 @@ environment: matrix: - COMPILER: mingw GENERATOR: "MSYS Makefiles" + BUILD_OPT: -- -j4 - COMPILER: msvc GENERATOR: "Visual Studio 14 2015" + CFLAGS: /MP + CXXFLAGS: /MP clone_depth: 5 @@ -56,8 +59,8 @@ before_deploy: Push-AppveyorArtifact "../$archive.tar.bz2" test_script: - - cmake --build . --target criterion_tests - - ps: try { ctest } catch { type Testing/Temporary/LastTest.log } + - cmake --build . --target criterion_tests %BUILD_OPT% + - ps: try { ctest -j4 } catch { type Testing/Temporary/LastTest.log } #after_test: # - 'make coveralls' From 670e923b3f20fcbabe574d3cc997e3e81aece40f Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 27 Sep 2015 14:06:23 +0200 Subject: [PATCH 048/211] Reduced number of cmake parallel jobs on appveyor to 2 --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 318deb8c..9c77ac6c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -15,7 +15,7 @@ environment: matrix: - COMPILER: mingw GENERATOR: "MSYS Makefiles" - BUILD_OPT: -- -j4 + BUILD_OPT: -- -j2 - COMPILER: msvc GENERATOR: "Visual Studio 14 2015" CFLAGS: /MP @@ -60,7 +60,7 @@ before_deploy: test_script: - cmake --build . --target criterion_tests %BUILD_OPT% - - ps: try { ctest -j4 } catch { type Testing/Temporary/LastTest.log } + - ps: try { ctest -j2 } catch { type Testing/Temporary/LastTest.log } #after_test: # - 'make coveralls' From ee4e811bd0b68cb923f7c426448392fb7e23282e Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 27 Sep 2015 14:15:23 +0200 Subject: [PATCH 049/211] Removed parallelization on mingw builds on appveyor --- appveyor.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 9c77ac6c..ae991136 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -15,7 +15,6 @@ environment: matrix: - COMPILER: mingw GENERATOR: "MSYS Makefiles" - BUILD_OPT: -- -j2 - COMPILER: msvc GENERATOR: "Visual Studio 14 2015" CFLAGS: /MP @@ -59,7 +58,7 @@ before_deploy: Push-AppveyorArtifact "../$archive.tar.bz2" test_script: - - cmake --build . --target criterion_tests %BUILD_OPT% + - cmake --build . --target criterion_tests - ps: try { ctest -j2 } catch { type Testing/Temporary/LastTest.log } #after_test: From 3fe7b41256704ea9263373aae13546457836194c Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 27 Sep 2015 23:49:22 +0200 Subject: [PATCH 050/211] [Issue #59] Added more explicit abort messages --- include/criterion/logging.h | 4 ++++ src/compat/alloc.c | 3 ++- src/compat/pipe.h | 2 ++ src/compat/process.c | 7 ++++++- src/core/runner.c | 6 +++++- src/core/worker.c | 4 ++++ src/io/event.c | 11 +++++++---- src/log/logging.c | 17 ++++++++++++++++- 8 files changed, 46 insertions(+), 8 deletions(-) diff --git a/include/criterion/logging.h b/include/criterion/logging.h index 17baf4b5..d823b9c7 100644 --- a/include/criterion/logging.h +++ b/include/criterion/logging.h @@ -47,6 +47,7 @@ enum criterion_logging_prefix { CRITERION_LOGGING_PREFIX_SKIP, CRITERION_LOGGING_PREFIX_PASS, CRITERION_LOGGING_PREFIX_FAIL, + CRITERION_LOGGING_PREFIX_ERR, }; struct criterion_prefix_data { @@ -82,6 +83,7 @@ extern const struct criterion_prefix_data g_criterion_logging_prefixes[]; # define CRITERION_PREFIX_SKIP (&g_criterion_logging_prefixes[CRITERION_LOGGING_PREFIX_SKIP ]) # define CRITERION_PREFIX_PASS (&g_criterion_logging_prefixes[CRITERION_LOGGING_PREFIX_PASS ]) # define CRITERION_PREFIX_FAIL (&g_criterion_logging_prefixes[CRITERION_LOGGING_PREFIX_FAIL ]) +# define CRITERION_PREFIX_ERR (&g_criterion_logging_prefixes[CRITERION_LOGGING_PREFIX_ERR ]) CR_API void criterion_vlog(enum criterion_logging_level level, const char *msg, va_list args); @@ -97,6 +99,8 @@ CR_API void criterion_log(enum criterion_logging_level level, const char *msg, . # define criterion_pinfo(...) criterion_plog(CRITERION_INFO, __VA_ARGS__) # define criterion_pimportant(...) criterion_plog(CRITERION_IMPORTANT, __VA_ARGS__) +# define criterion_perror(...) criterion_plog(CRITERION_IMPORTANT, CRITERION_PREFIX_ERR, __VA_ARGS__) + struct criterion_output_provider { void (*log_pre_all )(struct criterion_test_set *set); void (*log_pre_suite )(struct criterion_suite_set *set); diff --git a/src/compat/alloc.c b/src/compat/alloc.c index 7ae9d6d3..48d83f54 100644 --- a/src/compat/alloc.c +++ b/src/compat/alloc.c @@ -23,6 +23,7 @@ */ #include "alloc.h" #include "internal.h" +#include "criterion/logging.h" #include <stdlib.h> #ifdef VANILLA_WIN32 @@ -51,7 +52,7 @@ void init_inheritable_heap(void) { HeapDestroy(h->handle); if (g_heap == (HANDLE) NULL) { - fputs("Could not create the private inheritable heap.", stderr); + criterion_perror("Could not create the private inheritable heap.\n"); abort(); } } diff --git a/src/compat/pipe.h b/src/compat/pipe.h index 148bb1e8..f6a607e8 100644 --- a/src/compat/pipe.h +++ b/src/compat/pipe.h @@ -27,6 +27,7 @@ # include <stdio.h> # include <stdlib.h> # include "common.h" +# include "criterion/logging.h" struct pipe_handle; typedef struct pipe_handle s_pipe_handle; @@ -69,6 +70,7 @@ INLINE FILE* get_std_file(enum criterion_std_fd fd_kind) { case CR_STDOUT: return stdout; case CR_STDERR: return stderr; } + criterion_perror("get_std_file: invalid parameter.\n"); abort(); } diff --git a/src/compat/process.c b/src/compat/process.c index 08b66255..4e6c2869 100644 --- a/src/compat/process.c +++ b/src/compat/process.c @@ -23,6 +23,7 @@ */ #include <assert.h> #include <string.h> +#include <errno.h> #include <csptr/smalloc.h> #include "core/worker.h" #include "core/runner.h" @@ -133,8 +134,12 @@ static void handle_sigchld(UNUSED int sig) { memcpy(buf + sizeof (kind), &pid_ull, sizeof (pid_ull)); memcpy(buf + sizeof (kind) + sizeof (pid_ull), &ws, sizeof (ws)); - if (write(fd, &buf, sizeof (buf)) < (ssize_t) sizeof (buf)) + if (write(fd, &buf, sizeof (buf)) < (ssize_t) sizeof (buf)) { + criterion_perror("Could not write the WORKER_TERMINATED event " + "down the event pipe: %s.\n", + strerror(errno)); abort(); + } } } #endif diff --git a/src/core/runner.c b/src/core/runner.c index d12e3f82..ca72f179 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -24,6 +24,7 @@ #define CRITERION_LOGGING_COLORS #include <stdlib.h> #include <stdio.h> +#include <errno.h> #include <csptr/smalloc.h> #include <valgrind/valgrind.h> #include "criterion/criterion.h" @@ -437,8 +438,11 @@ static int criterion_run_all_tests_impl(struct criterion_test_set *set) { fflush(NULL); // flush everything before forking g_worker_pipe = stdpipe(); - if (g_worker_pipe == NULL) + if (g_worker_pipe == NULL) { + criterion_perror("Could not initialize the event pipe: %s.\n", + strerror(errno)); abort(); + } struct criterion_global_stats *stats = stats_init(); run_tests_async(set, stats); diff --git a/src/core/worker.c b/src/core/worker.c index bbc26df8..3a6240db 100644 --- a/src/core/worker.c +++ b/src/core/worker.c @@ -23,6 +23,7 @@ */ #include <stdlib.h> #include <stdbool.h> +#include <errno.h> #include <csptr/smalloc.h> #include "criterion/types.h" @@ -69,6 +70,8 @@ struct event *worker_read_event(struct worker_set *workers, s_pipe_file_handle * return ev; } } + criterion_perror("Could not link back the event PID to the active workers.\n"); + criterion_perror("The event pipe might have been corrupted.\n"); abort(); } return NULL; @@ -102,6 +105,7 @@ struct worker *spawn_test_worker(struct execution_context *ctx, s_proc_handle *proc = fork_process(); if (proc == (void *) -1) { + criterion_perror("Could not fork the current process and start a worker: %s.\n", strerror(errno)); abort(); } else if (proc == NULL) { run_worker(&g_worker_context); diff --git a/src/io/event.c b/src/io/event.c index 3820ba3f..2747f638 100644 --- a/src/io/event.c +++ b/src/io/event.c @@ -28,6 +28,7 @@ #include "criterion/stats.h" #include "criterion/common.h" #include "criterion/hooks.h" +#include "criterion/logging.h" #include "core/worker.h" #include "event.h" @@ -50,10 +51,12 @@ void destroy_assert_event(void *ptr, UNUSED void *meta) { # define unlikely(x) (x) #endif -#define ASSERT(Cond) \ - do { \ - if (unlikely(!(Cond))) \ - abort(); \ +#define ASSERT(Cond) \ + do { \ + if (unlikely(!(Cond))){ \ + criterion_perror("Corrupted event IO in the worker pipe.\n"); \ + abort(); \ + } \ } while (0) struct event *read_event(s_pipe_file_handle *f) { diff --git a/src/log/logging.c b/src/log/logging.c index 7ef465b8..a09b2d71 100644 --- a/src/log/logging.c +++ b/src/log/logging.c @@ -31,8 +31,10 @@ #ifdef ENABLE_NLS # define LOG_FORMAT "[%1$s%2$s%3$s] %4$s" +# define ERROR_FORMAT "[%1$s%2$s%3$s] %4$s%5$s%6$s%7$s" #else # define LOG_FORMAT "[%s%s%s] %s" +# define ERROR_FORMAT "[%s%s%s] %s%s%s%s" #endif const struct criterion_prefix_data g_criterion_logging_prefixes[] = { @@ -42,6 +44,7 @@ const struct criterion_prefix_data g_criterion_logging_prefixes[] = { [CRITERION_LOGGING_PREFIX_SKIP] = { "SKIP", CRIT_FG_GOLD }, [CRITERION_LOGGING_PREFIX_PASS] = { "PASS", CRIT_FG_GREEN }, [CRITERION_LOGGING_PREFIX_FAIL] = { "FAIL", CRIT_FG_RED }, + [CRITERION_LOGGING_PREFIX_ERR] = { "ERR ", CRIT_FG_RED }, { NULL, NULL } }; @@ -56,11 +59,23 @@ void criterion_plog(enum criterion_logging_level level, const struct criterion_p vsnprintf(formatted_msg, sizeof formatted_msg, msg, args); va_end(args); - fprintf(stderr, _(LOG_FORMAT), + if (prefix == &g_criterion_logging_prefixes[CRITERION_LOGGING_PREFIX_ERR]) { + fprintf(stderr, _(ERROR_FORMAT), + CRIT_COLOR_NORMALIZE(prefix->color), + prefix->prefix, + RESET, + FG_RED, + FG_BOLD, + formatted_msg, + RESET); + } else { + fprintf(stderr, _(LOG_FORMAT), CRIT_COLOR_NORMALIZE(prefix->color), prefix->prefix, RESET, formatted_msg); + } + } void criterion_log(enum criterion_logging_level level, const char *msg, ...) { From 218cd9ecfac6e195b37711b608167b6332e106eb Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 28 Sep 2015 12:26:40 +0200 Subject: [PATCH 051/211] Added /usr/local/include as a system include directory --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 09923a39..71ae77d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,8 +16,9 @@ endif () add_subdirectory(dependencies/libcsptr/ EXCLUDE_FROM_ALL) add_subdirectory(dependencies/dyncall/ EXCLUDE_FROM_ALL) +include_directories(SYSTEM /usr/local/include) + include_directories( - /usr/local/include/ dependencies/libcsptr/include/ dependencies/dyncall/dyncall/ dependencies/valgrind/include/ From 9549db4fac82b5e8ac83ec30d33219d956144296 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 28 Sep 2015 13:30:02 +0200 Subject: [PATCH 052/211] [Issue #60] Added regression tests for theories --- samples/tests/CMakeLists.txt | 2 + .../theories_regression.c.bin.err.expected | 15 +++++ .../theories_regression.c.bin.out.expected | 0 .../theories_regression.cc.bin.err.expected | 15 +++++ .../theories_regression.cc.bin.out.expected | 0 samples/tests/theories_regression.c | 53 ++++++++++++++++++ samples/tests/theories_regression.cc | 55 +++++++++++++++++++ 7 files changed, 140 insertions(+) create mode 100644 samples/tests/outputs/theories_regression.c.bin.err.expected create mode 100644 samples/tests/outputs/theories_regression.c.bin.out.expected create mode 100644 samples/tests/outputs/theories_regression.cc.bin.err.expected create mode 100644 samples/tests/outputs/theories_regression.cc.bin.out.expected create mode 100644 samples/tests/theories_regression.c create mode 100644 samples/tests/theories_regression.cc diff --git a/samples/tests/CMakeLists.txt b/samples/tests/CMakeLists.txt index 463d4da7..388c5aef 100644 --- a/samples/tests/CMakeLists.txt +++ b/samples/tests/CMakeLists.txt @@ -3,11 +3,13 @@ set(SAMPLES exit.c long-messages.c other-crashes.c + theories_regression.c failmessages.cc exit.cc long-messages.cc other-crashes.cc + theories_regression.cc ) add_samples("${CMAKE_CURRENT_LIST_DIR}" "${SAMPLES}") diff --git a/samples/tests/outputs/theories_regression.c.bin.err.expected b/samples/tests/outputs/theories_regression.c.bin.err.expected new file mode 100644 index 00000000..c09ce14c --- /dev/null +++ b/samples/tests/outputs/theories_regression.c.bin.err.expected @@ -0,0 +1,15 @@ +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m52[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m52[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m52[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m52[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m52[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) +[[0;31mFAIL[0m] theory::gen: (0.00s) +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m35[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 1l, 1l, 3.14f, 3.14, "test", "other test") +[[0;31mFAIL[0m] theory::misc: (0.00s) +[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/tests/outputs/theories_regression.c.bin.out.expected b/samples/tests/outputs/theories_regression.c.bin.out.expected new file mode 100644 index 00000000..e69de29b diff --git a/samples/tests/outputs/theories_regression.cc.bin.err.expected b/samples/tests/outputs/theories_regression.cc.bin.err.expected new file mode 100644 index 00000000..4c10ddd4 --- /dev/null +++ b/samples/tests/outputs/theories_regression.cc.bin.err.expected @@ -0,0 +1,15 @@ +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m54[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m54[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m54[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m54[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m54[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) +[[0;31mFAIL[0m] theory::gen: (0.00s) +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m37[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 1l, 1l, 3.14f, 3.14, "test", "other test") +[[0;31mFAIL[0m] theory::misc: (0.00s) +[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/tests/outputs/theories_regression.cc.bin.out.expected b/samples/tests/outputs/theories_regression.cc.bin.out.expected new file mode 100644 index 00000000..e69de29b diff --git a/samples/tests/theories_regression.c b/samples/tests/theories_regression.c new file mode 100644 index 00000000..b8d4ca57 --- /dev/null +++ b/samples/tests/theories_regression.c @@ -0,0 +1,53 @@ +#ifdef _MSC_VER +#pragma warning(disable : 4090) +#endif + +#include <criterion/theories.h> + +// Testing for various parameters + +TheoryDataPoints(theory, misc) = { + DataPoints(char, 'a'), + DataPoints(bool, true), + DataPoints(short, 1), + DataPoints(int, 1), + DataPoints(long, 1), + DataPoints(long long, 1), + DataPoints(float, 3.14f), + DataPoints(double, 3.14), + DataPoints(char *, "test"), + DataPoints(const char *, "other test"), +}; + +Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, char *str, const char *cstr), theory, misc) { + cr_assert(b); + cr_assert_eq(c, 'a'); + cr_assert_eq(s, 1); + cr_assert_eq(i, 1); + cr_assert_eq(l, 1); + cr_assert_eq(ll, 1); + cr_assert_eq(f, 3.14f); + cr_assert_eq(d, 3.14); + cr_assert_str_eq(str, "test"); + cr_assert_str_eq(cstr, "other test"); + + // abort to see the formatted string of all parameters + cr_assert_fail(); +} + +// Manually generate datapoints + +TheoryDataPoints(theory, gen) = { + DataPoints(int, 0), // placeholder +}; + +static void generate_datapoints(void) { + static int arr[] = {1, 2, 3, 4, 5}; + TheoryDataPoint(theory, gen)[0].len = 5; + TheoryDataPoint(theory, gen)[0].arr = &arr; +} + +Theory((int i), theory, gen, .init = generate_datapoints) { + (void) i; + cr_assert_fail(); // we fail to display the parameter +} diff --git a/samples/tests/theories_regression.cc b/samples/tests/theories_regression.cc new file mode 100644 index 00000000..5bebea19 --- /dev/null +++ b/samples/tests/theories_regression.cc @@ -0,0 +1,55 @@ +#ifdef _MSC_VER +#pragma warning(disable : 4090) +#endif + +#include <criterion/theories.h> + +// Testing for various parameters + +char test_str[] = {'t', 'e', 's', 't', '\0'}; + +TheoryDataPoints(theory, misc) = { + DataPoints(char, 'a'), + DataPoints(bool, true), + DataPoints(short, 1), + DataPoints(int, 1), + DataPoints(long, 1), + DataPoints(long long, 1), + DataPoints(float, 3.14f), + DataPoints(double, 3.14), + DataPoints(char *, test_str), + DataPoints(const char *, "other test"), +}; + +Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, char *str, const char *cstr), theory, misc) { + cr_assert(b); + cr_assert_eq(c, 'a'); + cr_assert_eq(s, 1); + cr_assert_eq(i, 1); + cr_assert_eq(l, 1); + cr_assert_eq(ll, 1); + cr_assert_eq(f, 3.14f); + cr_assert_eq(d, 3.14); + cr_assert_str_eq(str, "test"); + cr_assert_str_eq(cstr, "other test"); + + // abort to see the formatted string of all parameters + cr_assert_fail(); +} + +// Manually generate datapoints + +TheoryDataPoints(theory, gen) = { + DataPoints(int, 0), // placeholder +}; + +static void generate_datapoints(void) { + static int arr[] = {1, 2, 3, 4, 5}; + TheoryDataPoint(theory, gen)[0].len = 5; + TheoryDataPoint(theory, gen)[0].arr = &arr; +} + +Theory((int i), theory, gen, .init = generate_datapoints) { + (void) i; + cr_assert_fail(); // we fail to display the parameter +} From 4352878db6a1acc7fe68e8c2e82c001f8118260d Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 28 Sep 2015 19:56:28 +0200 Subject: [PATCH 053/211] Fixed incorrect float comparison on MinGW-GCC for theory samples --- samples/tests/theories_regression.c | 7 +++++-- samples/tests/theories_regression.cc | 7 +++++-- samples/theories.c | 7 +++++-- samples/theories.cc | 7 +++++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/samples/tests/theories_regression.c b/samples/tests/theories_regression.c index b8d4ca57..061c6de3 100644 --- a/samples/tests/theories_regression.c +++ b/samples/tests/theories_regression.c @@ -20,14 +20,17 @@ TheoryDataPoints(theory, misc) = { }; Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, char *str, const char *cstr), theory, misc) { + float reff = 3.14f; + double refd = 3.14; + cr_assert(b); cr_assert_eq(c, 'a'); cr_assert_eq(s, 1); cr_assert_eq(i, 1); cr_assert_eq(l, 1); cr_assert_eq(ll, 1); - cr_assert_eq(f, 3.14f); - cr_assert_eq(d, 3.14); + cr_assert_eq(f, reff); + cr_assert_eq(d, refd); cr_assert_str_eq(str, "test"); cr_assert_str_eq(cstr, "other test"); diff --git a/samples/tests/theories_regression.cc b/samples/tests/theories_regression.cc index 5bebea19..5bb020d2 100644 --- a/samples/tests/theories_regression.cc +++ b/samples/tests/theories_regression.cc @@ -22,14 +22,17 @@ TheoryDataPoints(theory, misc) = { }; Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, char *str, const char *cstr), theory, misc) { + float reff = 3.14f; + double refd = 3.14; + cr_assert(b); cr_assert_eq(c, 'a'); cr_assert_eq(s, 1); cr_assert_eq(i, 1); cr_assert_eq(l, 1); cr_assert_eq(ll, 1); - cr_assert_eq(f, 3.14f); - cr_assert_eq(d, 3.14); + cr_assert_eq(f, reff); + cr_assert_eq(d, refd); cr_assert_str_eq(str, "test"); cr_assert_str_eq(cstr, "other test"); diff --git a/samples/theories.c b/samples/theories.c index 0bbe7cc2..c918f4a7 100644 --- a/samples/theories.c +++ b/samples/theories.c @@ -87,14 +87,17 @@ TheoryDataPoints(theory, misc) = { }; Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, char *str, const char *cstr, struct my_object *obj), theory, misc) { + float reff = 3.14f; + double refd = 3.14; + cr_assert(b); cr_assert_eq(c, 'a'); cr_assert_eq(s, 1); cr_assert_eq(i, 1); cr_assert_eq(l, 1); cr_assert_eq(ll, 1); - cr_assert_eq(f, 3.14f); - cr_assert_eq(d, 3.14); + cr_assert_eq(f, reff); + cr_assert_eq(d, refd); cr_assert_str_eq(str, "test"); cr_assert_str_eq(cstr, "other test"); cr_assert_eq(obj->foo, 42); diff --git a/samples/theories.cc b/samples/theories.cc index 56027542..4ee981bf 100644 --- a/samples/theories.cc +++ b/samples/theories.cc @@ -95,14 +95,17 @@ TheoryDataPoints(theory, misc) = { }; Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, char *str, const char *cstr, struct my_object *obj), theory, misc) { + float reff = 3.14f; + double refd = 3.14; + cr_assert(b); cr_assert_eq(c, 'a'); cr_assert_eq(s, 1); cr_assert_eq(i, 1); cr_assert_eq(l, 1); cr_assert_eq(ll, 1); - cr_assert_eq(f, 3.14f); - cr_assert_eq(d, 3.14); + cr_assert_eq(f, reff); + cr_assert_eq(d, refd); cr_assert_str_eq(str, "test"); cr_assert_str_eq(cstr, "other test"); cr_assert_eq(obj->foo, 42); From fb6b0a6eaf3cef4e59ecb1e9af248da7586c38be Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 28 Sep 2015 22:01:51 +0200 Subject: [PATCH 054/211] Updated theory regression test output --- .../outputs/theories_regression.c.bin.err.expected | 14 +++++++------- .../theories_regression.cc.bin.err.expected | 14 +++++++------- samples/tests/theories_regression.c | 6 +----- samples/tests/theories_regression.cc | 6 +----- 4 files changed, 16 insertions(+), 24 deletions(-) diff --git a/samples/tests/outputs/theories_regression.c.bin.err.expected b/samples/tests/outputs/theories_regression.c.bin.err.expected index c09ce14c..0db8e129 100644 --- a/samples/tests/outputs/theories_regression.c.bin.err.expected +++ b/samples/tests/outputs/theories_regression.c.bin.err.expected @@ -1,15 +1,15 @@ -[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m52[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m51[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) -[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m52[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m51[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) -[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m52[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m51[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) -[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m52[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m51[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) -[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m52[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m51[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) [[0;31mFAIL[0m] theory::gen: (0.00s) -[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m35[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 1l, 1l, 3.14f, 3.14, "test", "other test") +[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m34[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 3.14f, 3.14, "test", "other test") [[0;31mFAIL[0m] theory::misc: (0.00s) [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/tests/outputs/theories_regression.cc.bin.err.expected b/samples/tests/outputs/theories_regression.cc.bin.err.expected index 4c10ddd4..a4e378ef 100644 --- a/samples/tests/outputs/theories_regression.cc.bin.err.expected +++ b/samples/tests/outputs/theories_regression.cc.bin.err.expected @@ -1,15 +1,15 @@ -[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m54[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m53[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) -[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m54[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m53[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) -[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m54[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m53[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) -[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m54[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m53[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) -[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m54[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m53[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) [[0;31mFAIL[0m] theory::gen: (0.00s) -[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m37[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 1l, 1l, 3.14f, 3.14, "test", "other test") +[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m36[0m: Assertion failed: The conditions for this assertion were not met. +[[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 3.14f, 3.14, "test", "other test") [[0;31mFAIL[0m] theory::misc: (0.00s) [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/tests/theories_regression.c b/samples/tests/theories_regression.c index 061c6de3..6661f9fd 100644 --- a/samples/tests/theories_regression.c +++ b/samples/tests/theories_regression.c @@ -11,15 +11,13 @@ TheoryDataPoints(theory, misc) = { DataPoints(bool, true), DataPoints(short, 1), DataPoints(int, 1), - DataPoints(long, 1), - DataPoints(long long, 1), DataPoints(float, 3.14f), DataPoints(double, 3.14), DataPoints(char *, "test"), DataPoints(const char *, "other test"), }; -Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, char *str, const char *cstr), theory, misc) { +Theory((char c, bool b, short s, int i, float f, double d, char *str, const char *cstr), theory, misc) { float reff = 3.14f; double refd = 3.14; @@ -27,8 +25,6 @@ Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, cr_assert_eq(c, 'a'); cr_assert_eq(s, 1); cr_assert_eq(i, 1); - cr_assert_eq(l, 1); - cr_assert_eq(ll, 1); cr_assert_eq(f, reff); cr_assert_eq(d, refd); cr_assert_str_eq(str, "test"); diff --git a/samples/tests/theories_regression.cc b/samples/tests/theories_regression.cc index 5bb020d2..608954fe 100644 --- a/samples/tests/theories_regression.cc +++ b/samples/tests/theories_regression.cc @@ -13,15 +13,13 @@ TheoryDataPoints(theory, misc) = { DataPoints(bool, true), DataPoints(short, 1), DataPoints(int, 1), - DataPoints(long, 1), - DataPoints(long long, 1), DataPoints(float, 3.14f), DataPoints(double, 3.14), DataPoints(char *, test_str), DataPoints(const char *, "other test"), }; -Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, char *str, const char *cstr), theory, misc) { +Theory((char c, bool b, short s, int i, float f, double d, char *str, const char *cstr), theory, misc) { float reff = 3.14f; double refd = 3.14; @@ -29,8 +27,6 @@ Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, cr_assert_eq(c, 'a'); cr_assert_eq(s, 1); cr_assert_eq(i, 1); - cr_assert_eq(l, 1); - cr_assert_eq(ll, 1); cr_assert_eq(f, reff); cr_assert_eq(d, refd); cr_assert_str_eq(str, "test"); From 93e766b3fe1ed412ce37b88c55b65500afafc64b Mon Sep 17 00:00:00 2001 From: Adeel <adeelbm@outlook.com> Date: Tue, 29 Sep 2015 13:21:41 +0300 Subject: [PATCH 055/211] Deps: Mark UNUSED parameters in valgrind header. Clang on FreeBSD was complaining: ```csh [ 26%] Building C object CMakeFiles/criterion.dir/src/core/abort.c.o [ 30%] Building C object CMakeFiles/criterion.dir/src/core/report.c.o [ 30%] Building C object CMakeFiles/criterion.dir/src/core/runner.c.o In file included from /root/projects/Criterion/Criterion/Criterion/src/core/runner.c:29: /root/projects/Criterion/Criterion/Criterion/dependencies/valgrind/include/valgrind/valgrind.h:6223:29: error: unused parameter 'format' [-Werror,-Wunused-parameter] VALGRIND_PRINTF(const char *format, ...) ^ /root/projects/Criterion/Criterion/Criterion/dependencies/valgrind/include/valgrind/valgrind.h:6261:39: error: unused parameter 'format' [-Werror,-Wunused-parameter] VALGRIND_PRINTF_BACKTRACE(const char *format, ...) ^ 2 errors generated. ``` The other way to fix it was to add a compiler option in CMake: ```cmake add_compile_options(-Wno-unused-parameter) ``` but this approach disables the check globally. I am not sure whether there is a way to scope the compiler option to a subdirectory; especially in cases where submodule (via `add_subdirectory`) headers have unsed parameters. --- dependencies/valgrind/include/valgrind/valgrind.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dependencies/valgrind/include/valgrind/valgrind.h b/dependencies/valgrind/include/valgrind/valgrind.h index 6954d751..bf5620a6 100644 --- a/dependencies/valgrind/include/valgrind/valgrind.h +++ b/dependencies/valgrind/include/valgrind/valgrind.h @@ -93,6 +93,7 @@ #include <stdarg.h> +#include <criterion/common.h> /* Nb: this file might be included in a file compiled with -ansi. So we can't use C++ style "//" comments nor the "asm" keyword (instead @@ -6220,7 +6221,7 @@ static int #if defined(_MSC_VER) __inline #endif -VALGRIND_PRINTF(const char *format, ...) +VALGRIND_PRINTF(UNUSED const char *format, ...) { #if defined(NVALGRIND) return 0; @@ -6258,7 +6259,7 @@ static int #if defined(_MSC_VER) __inline #endif -VALGRIND_PRINTF_BACKTRACE(const char *format, ...) +VALGRIND_PRINTF_BACKTRACE(UNUSED const char *format, ...) { #if defined(NVALGRIND) return 0; From 4dcde5259cd241791f288da8c6864b2673c71ab7 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 1 Oct 2015 15:05:22 +0200 Subject: [PATCH 056/211] Added C/C++ language isolation wrappers --- CMakeLists.txt | 3 ++ include/criterion/criterion.h | 3 ++ include/criterion/types.h | 6 +++ src/core/runner.c | 35 +++---------- src/core/wrappers/wrap.c | 65 ++++++++++++++++++++++++ src/core/wrappers/wrap.cc | 96 +++++++++++++++++++++++++++++++++++ src/core/wrappers/wrap.h | 36 +++++++++++++ 7 files changed, 216 insertions(+), 28 deletions(-) create mode 100644 src/core/wrappers/wrap.c create mode 100644 src/core/wrappers/wrap.cc create mode 100644 src/core/wrappers/wrap.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 71ae77d2..8a9e1bb6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,7 @@ add_definitions(-DCRITERION_BUILDING_DLL=1) if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -g -std=gnu99") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -g -std=c++11") endif () if (MSVC) @@ -84,6 +85,8 @@ find_package(PCRE) # List sources and headers set(SOURCE_FILES + src/core/wrappers/wrap.c + src/core/wrappers/wrap.cc src/core/abort.c src/core/abort.h src/core/report.c diff --git a/include/criterion/criterion.h b/include/criterion/criterion.h index db9dfdcb..6182434a 100644 --- a/include/criterion/criterion.h +++ b/include/criterion/criterion.h @@ -36,9 +36,11 @@ # ifdef __cplusplus # define TEST_PROTOTYPE_(Category, Name) \ extern "C" void IDENTIFIER_(Category, Name, impl)(void) +# define CR_LANG CR_LANG_CPP # else # define TEST_PROTOTYPE_(Category, Name) \ void IDENTIFIER_(Category, Name, impl)(void) +# define CR_LANG CR_LANG_C # endif # define SUITE_IDENTIFIER_(Name, Suffix) \ @@ -49,6 +51,7 @@ TEST_PROTOTYPE_(Category, Name); \ struct criterion_test_extra_data IDENTIFIER_(Category, Name, extra) = \ CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ + .lang_ = CR_LANG, \ .kind_ = CR_TEST_NORMAL, \ .param_ = (struct criterion_test_params(*)(void)) NULL, \ .identifier_ = #Category "/" #Name, \ diff --git a/include/criterion/types.h b/include/criterion/types.h index a28d833f..33540981 100644 --- a/include/criterion/types.h +++ b/include/criterion/types.h @@ -35,6 +35,11 @@ using std::size_t; # endif # include "common.h" +enum criterion_language { + CR_LANG_C, + CR_LANG_CPP, +}; + enum criterion_test_kind { CR_TEST_NORMAL, CR_TEST_PARAMETERIZED, @@ -84,6 +89,7 @@ struct criterion_test_params { struct criterion_test_extra_data { int sentinel_; + enum criterion_language lang_; enum criterion_test_kind kind_; struct criterion_test_params (*param_)(void); const char *identifier_; diff --git a/src/core/runner.c b/src/core/runner.c index ca72f179..9e2d08e5 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -34,6 +34,7 @@ #include "compat/time.h" #include "compat/posix.h" #include "compat/processor.h" +#include "wrappers/wrap.h" #include "string/i18n.h" #include "io/event.h" #include "runner_coroutine.h" @@ -156,6 +157,11 @@ struct criterion_test_set *criterion_init(void) { return set; } +f_wrapper *g_wrappers[] = { + [CR_LANG_C] = c_wrap, + [CR_LANG_CPP] = cpp_wrap, +}; + void run_test_child(struct criterion_test *test, struct criterion_suite *suite) { @@ -168,34 +174,7 @@ void run_test_child(struct criterion_test *test, else if (test->data->timeout != 0) setup_timeout((uint64_t) (test->data->timeout * 1e9)); - send_event(PRE_INIT, NULL, 0); - if (suite->data) - (suite->data->init ? suite->data->init : nothing)(); - (test->data->init ? test->data->init : nothing)(); - send_event(PRE_TEST, NULL, 0); - - struct timespec_compat ts; - if (!setjmp(g_pre_test)) { - timer_start(&ts); - if (test->test) { - if (!test->data->param_) { - test->test(); - } else { - void(*param_test_func)(void *) = (void(*)(void*)) test->test; - param_test_func(g_worker_context.param->ptr); - } - } - } - - double elapsed_time; - if (!timer_end(&elapsed_time, &ts)) - elapsed_time = -1; - - send_event(POST_TEST, &elapsed_time, sizeof (double)); - (test->data->fini ? test->data->fini : nothing)(); - if (suite->data) - (suite->data->fini ? suite->data->fini : nothing)(); - send_event(POST_FINI, NULL, 0); + g_wrappers[test->data->lang_](test, suite); } #define push_event(Kind, ...) \ diff --git a/src/core/wrappers/wrap.c b/src/core/wrappers/wrap.c new file mode 100644 index 00000000..01acf622 --- /dev/null +++ b/src/core/wrappers/wrap.c @@ -0,0 +1,65 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#include "core/abort.h" +#include "core/stats.h" +#include "core/worker.h" +#include "core/report.h" +#include "compat/time.h" +#include "io/event.h" +#include "wrap.h" + +static INLINE void nothing(void) {} + +void c_wrap(struct criterion_test *test, struct criterion_suite *suite) { + + send_event(PRE_INIT, NULL, 0); + if (suite->data) + (suite->data->init ? suite->data->init : nothing)(); + (test->data->init ? test->data->init : nothing)(); + send_event(PRE_TEST, NULL, 0); + + struct timespec_compat ts; + if (!setjmp(g_pre_test)) { + timer_start(&ts); + if (test->test) { + if (!test->data->param_) { + test->test(); + } else { + void(*param_test_func)(void *) = (void(*)(void*)) test->test; + param_test_func(g_worker_context.param->ptr); + } + } + } + + double elapsed_time; + if (!timer_end(&elapsed_time, &ts)) + elapsed_time = -1; + + send_event(POST_TEST, &elapsed_time, sizeof (double)); + (test->data->fini ? test->data->fini : nothing)(); + if (suite->data) + (suite->data->fini ? suite->data->fini : nothing)(); + send_event(POST_FINI, NULL, 0); + +} diff --git a/src/core/wrappers/wrap.cc b/src/core/wrappers/wrap.cc new file mode 100644 index 00000000..386e3eb5 --- /dev/null +++ b/src/core/wrappers/wrap.cc @@ -0,0 +1,96 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#include <exception> +#include "criterion/assert.h" + +extern "C" { + +#include "core/abort.h" +#include "core/stats.h" +#include "core/worker.h" +#include "core/report.h" +#include "compat/time.h" +#include "io/event.h" +#include "wrap.h" + +static INLINE void nothing(void) {} + +void cpp_wrap(struct criterion_test *test, struct criterion_suite *suite) { + + send_event(PRE_INIT, NULL, 0); + try { + if (suite->data) + (suite->data->init ? suite->data->init : nothing)(); + (test->data->init ? test->data->init : nothing)(); + } catch (const std::exception &e) { + cr_assert_fail("Caught an unexpected exception during the test initialization: %s.", e.what()); + std::exit(1); + } catch (...) { + cr_assert_fail("Caught some unexpected exception during the test initialization."); + std::exit(1); + } + send_event(PRE_TEST, NULL, 0); + + struct timespec_compat ts; + if (!setjmp(g_pre_test)) { + timer_start(&ts); + if (test->test) { + try { + if (!test->data->param_) { + test->test(); + } else { + void(*param_test_func)(void *) = (void(*)(void*)) test->test; + param_test_func(g_worker_context.param->ptr); + } + } catch (const std::exception &e) { + cr_assert_fail("Caught an unexpected exception during the test execution: %s.", e.what()); + std::exit(1); + } catch (...) { + cr_assert_fail("Caught some unexpected exception during the test execution."); + std::exit(1); + } + } + } + + double elapsed_time; + if (!timer_end(&elapsed_time, &ts)) + elapsed_time = -1; + + send_event(POST_TEST, &elapsed_time, sizeof (double)); + try { + (test->data->fini ? test->data->fini : nothing)(); + if (suite->data) + (suite->data->fini ? suite->data->fini : nothing)(); + } catch (const std::exception &e) { + cr_assert_fail("Caught an unexpected exception during the test finalization: %s.", e.what()); + std::exit(1); + } catch (...) { + cr_assert_fail("Caught some unexpected exception during the test finalization."); + std::exit(1); + } + send_event(POST_FINI, NULL, 0); + +} + +} diff --git a/src/core/wrappers/wrap.h b/src/core/wrappers/wrap.h new file mode 100644 index 00000000..b7d518f4 --- /dev/null +++ b/src/core/wrappers/wrap.h @@ -0,0 +1,36 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef WRAP_H_ +# define WRAP_H_ + +# include "criterion/types.h" + +typedef void (f_wrapper)(struct criterion_test *, struct criterion_suite *); + +void c_wrap(struct criterion_test *test, struct criterion_suite *suite); +void cpp_wrap(struct criterion_test *test, struct criterion_suite *suite); + +extern f_wrapper *g_wrappers[]; + +#endif /* !WRAP_H_ */ From 55553a06814c02eece5a7e46181fc6e45ca6f8d2 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 1 Oct 2015 15:36:51 +0200 Subject: [PATCH 057/211] Cleaned up headers for wrap.cc --- src/core/wrappers/wrap.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/wrappers/wrap.cc b/src/core/wrappers/wrap.cc index 386e3eb5..f2ae058e 100644 --- a/src/core/wrappers/wrap.cc +++ b/src/core/wrappers/wrap.cc @@ -23,16 +23,16 @@ */ #include <exception> #include "criterion/assert.h" +#include "criterion/event.h" extern "C" { #include "core/abort.h" -#include "core/stats.h" -#include "core/worker.h" #include "core/report.h" +#include "core/worker.h" #include "compat/time.h" -#include "io/event.h" #include "wrap.h" +#include "common.h" static INLINE void nothing(void) {} From d4c306f7cd5ba3a6d544412b89a6e6a38b9711c6 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 1 Oct 2015 15:38:24 +0200 Subject: [PATCH 058/211] Fixed MinGW header bug where off_t/off64_t is not defined in io.h (See http://sourceforge.net/p/mingw/bugs/2024/) --- src/compat/internal.h | 8 ++++++++ src/compat/posix.h | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/compat/internal.h b/src/compat/internal.h index 43ff62d8..551212b9 100644 --- a/src/compat/internal.h +++ b/src/compat/internal.h @@ -30,7 +30,15 @@ # undef _WIN32_WINNT # define _WIN32_WINNT 0x0502 # include <windows.h> +# if defined(__MINGW32__) || defined(__MINGW64__) +# define off_t _off_t +# define off64_t _off64_t +# endif # include <io.h> +# if defined(__MINGW32__) || defined(__MINGW64__) +# undef off_t +# undef off64_t +# endif # include <fcntl.h> # include <winnt.h> # include <stdint.h> diff --git a/src/compat/posix.h b/src/compat/posix.h index 043562db..fc0e8d8a 100644 --- a/src/compat/posix.h +++ b/src/compat/posix.h @@ -40,7 +40,15 @@ # define _POSIX_SOURCE 1 # define TMP_POSIX # endif +# if defined(__MINGW32__) || defined(__MINGW64__) +# define off_t _off_t +# define off64_t _off64_t +# endif # include <stdio.h> +# if defined(__MINGW32__) || defined(__MINGW64__) +# undef off_t +# undef off64_t +# endif # ifdef TMP_POSIX # undef _POSIX_SOURCE # undef TMP_POSIX From 547c77266b2cc935f045042d62efb25c5c0d9aef Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 1 Oct 2015 23:11:56 +0200 Subject: [PATCH 059/211] Added criterion_test_die to abort tests with a message on unhandled exceptions --- include/criterion/logging.h | 1 + po/fr.po | 22 ++++++++++++++++------ samples/tests/CMakeLists.txt | 2 ++ samples/tests/exception.cc | 18 ++++++++++++++++++ src/core/abort.c | 24 ++++++++++++++++++++++++ src/core/abort.h | 2 ++ src/core/report.h | 8 ++++---- src/core/runner.c | 17 +++++++++++++++++ src/core/worker.h | 1 + src/core/wrappers/wrap.cc | 18 ++++++------------ src/io/event.c | 16 ++++++++++++++++ src/io/event.h | 1 + src/log/normal.c | 30 ++++++++++++++++++++++++++++++ 13 files changed, 138 insertions(+), 22 deletions(-) create mode 100644 samples/tests/exception.cc diff --git a/include/criterion/logging.h b/include/criterion/logging.h index d823b9c7..2f8e1d9f 100644 --- a/include/criterion/logging.h +++ b/include/criterion/logging.h @@ -110,6 +110,7 @@ struct criterion_output_provider { void (*log_theory_fail )(struct criterion_theory_stats *stats); void (*log_test_timeout )(struct criterion_test_stats *stats); void (*log_test_crash )(struct criterion_test_stats *stats); + void (*log_test_abort )(struct criterion_test_stats *stats, const char *msg); void (*log_other_crash )(struct criterion_test_stats *stats); void (*log_abnormal_exit)(struct criterion_test_stats *stats); void (*log_post_test )(struct criterion_test_stats *stats); diff --git a/po/fr.po b/po/fr.po index 92ad06ab..65717ee0 100644 --- a/po/fr.po +++ b/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: criterion 2.0.0\n" "Report-Msgid-Bugs-To: franklinmathieu+criterion@gmail.com\n" -"POT-Creation-Date: 2015-09-27 12:24+0200\n" +"POT-Creation-Date: 2015-10-01 23:09+0200\n" "PO-Revision-Date: 2015-04-03 17:58+0200\n" "Last-Translator: <franklinmathieu@gmail.com>\n" "Language-Team: French\n" @@ -78,6 +78,11 @@ msgstr "%1$s::%2$s: PLANTAGE!\n" #: src/log/normal.c:64 #, fuzzy, c-format +msgid "%1$s::%2$s: %3$s\n" +msgstr "%1$s::%2$s: (%3$3.2fs)\n" + +#: src/log/normal.c:65 +#, fuzzy, c-format msgid "" "%1$sWarning! The test `%2$s::%3$s` crashed during its setup or teardown." "%4$s\n" @@ -85,7 +90,7 @@ msgstr "" "%1$sAttention! Le test `%2$s::%3$s` a planté pendant son initialisation ou " "sa finalisation.%4$s\n" -#: src/log/normal.c:65 +#: src/log/normal.c:66 #, fuzzy, c-format msgid "" "%1$sWarning! The test `%2$s::%3$s` exited during its setup or teardown.%4$s\n" @@ -93,14 +98,14 @@ msgstr "" "%1$sAttention! Le test `%2$s::%3$s` a quitté pendant son initialisation ou " "sa finalisation.%4$s\n" -#: src/log/normal.c:66 +#: src/log/normal.c:67 #, c-format msgid "Running %1$s%2$lu%3$s test from %4$s%5$s%6$s:\n" msgid_plural "Running %1$s%2$lu%3$s tests from %4$s%5$s%6$s:\n" msgstr[0] "Lancement de %1$s%2$lu%3$s test dans %4$s%5$s%6$s:\n" msgstr[1] "Lancement de %1$s%2$lu%3$s tests dans %4$s%5$s%6$s:\n" -#: src/log/normal.c:68 +#: src/log/normal.c:69 #, c-format msgid "" "%1$sSynthesis: Tested: %2$s%3$lu%4$s | Passing: %5$s%6$lu%7$s | Failing: %8$s" @@ -109,6 +114,11 @@ msgstr "" "%1$sSynthèse: Testés: %2$s%3$lu%4$s | Validés: %5$s%6$lu%7$s | Échoués: %8$s" "%9$lu%10$s | Plantages: %11$s%12$lu%13$s %14$s\n" +#: src/log/normal.c:85 +#, fuzzy, c-format +msgid "%s::%s: %s\n" +msgstr "%1$s::%2$s: (%3$3.2fs)\n" + #: src/string/i18n.c:13 msgid "The conditions for this assertion were not met." msgstr "Les conditions de cette assertion n'ont pas été remplies." @@ -175,7 +185,7 @@ msgstr "L'instruction `%1$s` a levé une instance de l'exception `%2$s`." msgid "The statement `%1$s` did not throw an instance of the `%2$s` exception." msgstr "L'instruction `%1$s` n'a pas levé d'instance de l'exception `%2$s`." -#: src/core/runner.c:54 +#: src/core/runner.c:56 #, c-format msgid "" "%1$sWarning! Criterion has detected that it is running under valgrind, but " @@ -186,7 +196,7 @@ msgstr "" "l'option no_early_exit est explicitement désactivée. Les rapports d'erreur " "ne seront pas précis!%2$s\n" -#: src/core/runner.c:58 +#: src/core/runner.c:60 #, c-format msgid "" "%1$sWarning! Criterion has detected that it is running under valgrind, but " diff --git a/samples/tests/CMakeLists.txt b/samples/tests/CMakeLists.txt index 388c5aef..b2d2fca4 100644 --- a/samples/tests/CMakeLists.txt +++ b/samples/tests/CMakeLists.txt @@ -10,6 +10,8 @@ set(SAMPLES long-messages.cc other-crashes.cc theories_regression.cc + + exception.cc ) add_samples("${CMAKE_CURRENT_LIST_DIR}" "${SAMPLES}") diff --git a/samples/tests/exception.cc b/samples/tests/exception.cc new file mode 100644 index 00000000..2cbf7f31 --- /dev/null +++ b/samples/tests/exception.cc @@ -0,0 +1,18 @@ +#include <criterion/criterion.h> +#include <stdexcept> + +void raise_std(void) { + throw std::invalid_argument("Some exception message"); +} + +void raise_any(void) { + throw 1; +} + +Test(exception, raise_std) { raise_std(); } +Test(exception, raise_any) { raise_any(); } + +Test(exception, raise_std_init, .init = raise_std) {} +Test(exception, raise_any_init, .init = raise_any) {} +Test(exception, raise_std_fini, .fini = raise_std) {} +Test(exception, raise_any_fini, .fini = raise_any) {} diff --git a/src/core/abort.c b/src/core/abort.c index 1124244c..d8d7c65e 100644 --- a/src/core/abort.c +++ b/src/core/abort.c @@ -21,10 +21,34 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ +#include <string.h> #include "abort.h" +#include "criterion/asprintf-compat.h" +#include "io/event.h" jmp_buf g_pre_test; void criterion_abort_test(void) { longjmp(g_pre_test, 1); } + +void criterion_test_die(const char *msg, ...) { + va_list vl; + va_start(vl, msg); + char *formatted_msg = NULL; + int res = cr_vasprintf(&formatted_msg, msg, vl); + va_end(vl); + + if (res < 0) + abort(); + + size_t *buf = malloc(sizeof (size_t) + res + 1); + *buf = res + 1; + memcpy(buf + 1, formatted_msg, res + 1); + + send_event(TEST_ABORT, buf, sizeof (size_t) + res + 1); + free(buf); + free(formatted_msg); + + exit(0); +} diff --git a/src/core/abort.h b/src/core/abort.h index 064fe67d..401f09b7 100644 --- a/src/core/abort.h +++ b/src/core/abort.h @@ -29,4 +29,6 @@ extern jmp_buf g_pre_test; +void criterion_test_die(const char *msg, ...); + #endif /* !ABORT_H_ */ diff --git a/src/core/report.h b/src/core/report.h index bdcffac5..69f11266 100644 --- a/src/core/report.h +++ b/src/core/report.h @@ -45,9 +45,9 @@ DECL_CALL_REPORT_HOOKS(POST_FINI); DECL_CALL_REPORT_HOOKS(POST_SUITE); DECL_CALL_REPORT_HOOKS(POST_ALL); -#define log(Type, Arg) \ - log_(criterion_options.output_provider->log_ ## Type, Arg); -#define log_(Log, Arg) \ - (Log ? Log(Arg) : nothing()); +#define log(Type, ...) \ + log_(criterion_options.output_provider->log_ ## Type, __VA_ARGS__); +#define log_(Log, ...) \ + (Log ? Log(__VA_ARGS__) : nothing()); #endif /* !REPORT_H_ */ diff --git a/src/core/runner.c b/src/core/runner.c index 9e2d08e5..3ca32815 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -228,6 +228,18 @@ static void handle_worker_terminated(struct event *ev, log(post_fini, ctx->test_stats); } } else { + if (ctx->aborted) { + if (!ctx->normal_finish) { + double elapsed_time = 0; + push_event(POST_TEST, .data = &elapsed_time); + log(post_test, ctx->test_stats); + } + if (!ctx->cleaned_up) { + push_event(POST_FINI); + log(post_fini, ctx->test_stats); + } + return; + } if ((ctx->normal_finish && !ctx->cleaned_up) || !ctx->test_started) { log(abnormal_exit, ctx->test_stats); if (!ctx->test_started) { @@ -280,6 +292,11 @@ static void handle_event(struct event *ev) { report(ASSERT, ev->data); log(assert, ev->data); break; + case TEST_ABORT: + log(test_abort, ctx->test_stats, ev->data); + ctx->test_stats->failed = 1; + ctx->aborted = true; + break; case POST_TEST: report(POST_TEST, ctx->test_stats); log(post_test, ctx->test_stats); diff --git a/src/core/worker.h b/src/core/worker.h index 95a6ab7f..649e3eb1 100644 --- a/src/core/worker.h +++ b/src/core/worker.h @@ -38,6 +38,7 @@ struct execution_context { bool test_started; bool normal_finish; bool cleaned_up; + bool aborted; struct criterion_global_stats *stats; struct criterion_test *test; struct criterion_test_stats *test_stats; diff --git a/src/core/wrappers/wrap.cc b/src/core/wrappers/wrap.cc index f2ae058e..f6b140a6 100644 --- a/src/core/wrappers/wrap.cc +++ b/src/core/wrappers/wrap.cc @@ -44,11 +44,9 @@ void cpp_wrap(struct criterion_test *test, struct criterion_suite *suite) { (suite->data->init ? suite->data->init : nothing)(); (test->data->init ? test->data->init : nothing)(); } catch (const std::exception &e) { - cr_assert_fail("Caught an unexpected exception during the test initialization: %s.", e.what()); - std::exit(1); + criterion_test_die("Caught an unexpected exception during the test initialization: %s.", e.what()); } catch (...) { - cr_assert_fail("Caught some unexpected exception during the test initialization."); - std::exit(1); + criterion_test_die("Caught some unexpected exception during the test initialization."); } send_event(PRE_TEST, NULL, 0); @@ -64,11 +62,9 @@ void cpp_wrap(struct criterion_test *test, struct criterion_suite *suite) { param_test_func(g_worker_context.param->ptr); } } catch (const std::exception &e) { - cr_assert_fail("Caught an unexpected exception during the test execution: %s.", e.what()); - std::exit(1); + criterion_test_die("Caught an unexpected exception during the test execution: %s.", e.what()); } catch (...) { - cr_assert_fail("Caught some unexpected exception during the test execution."); - std::exit(1); + criterion_test_die("Caught some unexpected exception during the test execution."); } } } @@ -83,11 +79,9 @@ void cpp_wrap(struct criterion_test *test, struct criterion_suite *suite) { if (suite->data) (suite->data->fini ? suite->data->fini : nothing)(); } catch (const std::exception &e) { - cr_assert_fail("Caught an unexpected exception during the test finalization: %s.", e.what()); - std::exit(1); + criterion_test_die("Caught an unexpected exception during the test finalization: %s.", e.what()); } catch (...) { - cr_assert_fail("Caught some unexpected exception during the test finalization."); - std::exit(1); + criterion_test_die("Caught some unexpected exception during the test finalization."); } send_event(POST_FINI, NULL, 0); diff --git a/src/io/event.c b/src/io/event.c index 2747f638..99bdd00e 100644 --- a/src/io/event.c +++ b/src/io/event.c @@ -90,6 +90,22 @@ struct event *read_event(s_pipe_file_handle *f) { *ev = (struct event) { .pid = pid, .kind = kind, .data = buf }; return ev; } + case TEST_ABORT: { + char *msg = NULL; + + size_t len = 0; + ASSERT(pipe_read(&len, sizeof (size_t), f) == 1); + + msg = malloc(len); + ASSERT(pipe_read(msg, len, f) == 1); + + struct event *ev = smalloc( + .size = sizeof (struct event), + .dtor = destroy_event + ); + *ev = (struct event) { .pid = pid, .kind = kind, .data = msg }; + return ev; + } case THEORY_FAIL: { size_t len = 0; ASSERT(pipe_read(&len, sizeof (size_t), f) == 1); diff --git a/src/io/event.h b/src/io/event.h index 37818fb1..e4e555ba 100644 --- a/src/io/event.h +++ b/src/io/event.h @@ -41,6 +41,7 @@ struct event { enum other_event_kinds { WORKER_TERMINATED = 1 << 30, + TEST_ABORT, }; struct event *read_event(s_pipe_file_handle *f); diff --git a/src/log/normal.c b/src/log/normal.c index 3bb0c418..b48486aa 100644 --- a/src/log/normal.c +++ b/src/log/normal.c @@ -61,6 +61,7 @@ static msg_t msg_theory_fail = N_(" Theory %1$s::%2$s failed with the following static msg_t msg_test_timeout = N_("%1$s::%2$s: Timed out. (%3$3.2fs)\n"); static msg_t msg_test_crash_line = N_("%1$s%2$s%3$s:%4$s%5$u%6$s: Unexpected signal caught below this line!\n"); static msg_t msg_test_crash = N_("%1$s::%2$s: CRASH!\n"); +static msg_t msg_test_abort = N_("%1$s::%2$s: %3$s\n"); static msg_t msg_test_other_crash = N_("%1$sWarning! The test `%2$s::%3$s` crashed during its setup or teardown.%4$s\n"); static msg_t msg_test_abnormal_exit = N_("%1$sWarning! The test `%2$s::%3$s` exited during its setup or teardown.%4$s\n"); static msg_t msg_pre_suite[] = N_s("Running %1$s%2$lu%3$s test from %4$s%5$s%6$s:\n", @@ -81,6 +82,7 @@ static msg_t msg_theory_fail = " Theory %s::%s failed with the following parame static msg_t msg_test_timeout = "%s::%s: Timed out. (%3.2fs)\n"; static msg_t msg_test_crash_line = "%s%s%s:%s%u%s: Unexpected signal caught below this line!\n"; static msg_t msg_test_crash = "%s::%s: CRASH!\n"; +static msg_t msg_test_abort = N_("%s::%s: %s\n"); static msg_t msg_test_other_crash = "%sWarning! The test `%s::%s` crashed during its setup or teardown.%s\n"; static msg_t msg_test_abnormal_exit = "%sWarning! The test `%s::%s` exited during its setup or teardown.%s\n"; static msg_t msg_pre_suite[] = { "Running %s%lu%s test from %s%s%s:\n", @@ -230,6 +232,33 @@ void normal_log_test_timeout(UNUSED struct criterion_test_stats *stats) { stats->elapsed_time); } +void normal_log_test_abort(UNUSED struct criterion_test_stats *stats, const char *msg) { + + char *dup = strdup(msg); + +#ifdef VANILLA_WIN32 + char *line = strtok(dup, "\n"); +#else + char *saveptr = NULL; + char *line = strtok_r(dup, "\n", &saveptr); +#endif + + criterion_pimportant(CRITERION_PREFIX_DASHES, + _(msg_test_abort), + stats->test->category, + stats->test->name, + line); + +#ifdef VANILLA_WIN32 + while ((line = strtok(NULL, "\n"))) +#else + while ((line = strtok_r(NULL, "\n", &saveptr))) +#endif + criterion_pimportant(CRITERION_PREFIX_DASHES, _(msg_desc), line); + + free(dup); +} + struct criterion_output_provider normal_logging = { .log_pre_all = normal_log_pre_all, .log_pre_init = normal_log_pre_init, @@ -238,6 +267,7 @@ struct criterion_output_provider normal_logging = { .log_theory_fail = normal_log_theory_fail, .log_test_timeout = normal_log_test_timeout, .log_test_crash = normal_log_test_crash, + .log_test_abort = normal_log_test_abort, .log_other_crash = normal_log_other_crash, .log_abnormal_exit = normal_log_abnormal_exit, .log_post_test = normal_log_post_test, From 2d7c35b4f02266d6719e1e524c2855fea4337db4 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 1 Oct 2015 23:21:59 +0200 Subject: [PATCH 060/211] Set TERM=dumb when building on travis to get clean output --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 48b11f03..97c285a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,7 @@ script: -DCMAKE_BUILD_TYPE=${CONFIGURATION} -DCMAKE_INSTALL_PREFIX=criterion-${TRAVIS_TAG} .. - - cmake --build . --target criterion_tests -- -j4 + - TERM=dumb cmake --build . --target criterion_tests -- -j4 - ctest -j4 after_success: From 8197bef66c72a15c6d81ba1cefaafab748b16249 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 2 Oct 2015 00:58:38 +0200 Subject: [PATCH 061/211] Fixed assert message being freed too early, leading to some dangling pointers to invalid memory --- src/core/stats.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/stats.c b/src/core/stats.c index 488aa5c4..8980f2bb 100644 --- a/src/core/stats.c +++ b/src/core/stats.c @@ -184,6 +184,7 @@ static void push_assert(s_glob_stats *stats, s_assert_stats *dup = smalloc(sizeof (s_assert_stats)); memcpy(dup, data, sizeof (s_assert_stats)); + dup->message = strdup(data->message); dup->next = test->asserts; test->asserts = dup; From 12787b34bab2f514fa3424119fb6f71af849b1e5 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 2 Oct 2015 09:35:25 +0200 Subject: [PATCH 062/211] Added analytics in README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 54ebc939..a9d2edb1 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ [](https://github.com/Snaipe/Criterion/blob/master/LICENSE) [](https://github.com/Snaipe/Criterion/releases) + + A dead-simple, yet extensible, C and C++ unit testing framework.  From 10c9e4eed28991a2c689efe682f5e97b4cb64292 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 2 Oct 2015 10:00:51 +0200 Subject: [PATCH 063/211] [Issues #65,#66] Delayed TAP output until the end of the tests --- include/criterion/stats.h | 1 + src/core/stats.c | 1 + src/log/tap.c | 75 ++++++++++++++++++++------------------- 3 files changed, 41 insertions(+), 36 deletions(-) diff --git a/include/criterion/stats.h b/include/criterion/stats.h index ec80c2ff..e21a50fc 100644 --- a/include/criterion/stats.h +++ b/include/criterion/stats.h @@ -45,6 +45,7 @@ struct criterion_test_stats { int exit_code; float elapsed_time; bool timed_out; + bool crashed; unsigned progress; const char *file; diff --git a/src/core/stats.c b/src/core/stats.c index 8980f2bb..bba2f8b2 100644 --- a/src/core/stats.c +++ b/src/core/stats.c @@ -232,6 +232,7 @@ static void push_test_crash(s_glob_stats *stats, s_test_stats *test, UNUSED void *ptr) { test->failed = 1; + test->crashed = 1; ++suite->tests_failed; ++suite->tests_crashed; ++stats->tests_failed; diff --git a/src/log/tap.c b/src/log/tap.c index 4615f707..3a482318 100644 --- a/src/log/tap.c +++ b/src/log/tap.c @@ -38,44 +38,22 @@ # define strdup _strdup #endif -void tap_log_pre_all(struct criterion_test_set *set) { - size_t enabled_count = 0; - FOREACH_SET(struct criterion_suite_set *s, set->suites) { - if ((s->suite.data && s->suite.data->disabled) || !s->tests) - continue; - - FOREACH_SET(struct criterion_test *test, s->tests) { - if (!test->data->disabled) - ++enabled_count; - } - } - criterion_important("TAP version 13\n1.." SIZE_T_FORMAT "\n", set->tests); +static void print_prelude(struct criterion_global_stats *stats) { + criterion_important("TAP version 13\n1.." SIZE_T_FORMAT "\n", stats->nb_tests); criterion_important("# Criterion v%s\n", VERSION); } -void tap_log_pre_suite(struct criterion_suite_set *set) { +static void print_pre_suite(struct criterion_suite_stats *stats) { criterion_important("\n# Running " SIZE_T_FORMAT " tests from %s\n", - set->tests->size, - set->suite.name); + stats->nb_tests, + stats->suite->name); } static INLINE bool is_disabled(struct criterion_test *t, struct criterion_suite *s) { return t->data->disabled || (s->data && s->data->disabled); } -void tap_log_post_suite(struct criterion_suite_stats *stats) { - for (struct criterion_test_stats *ts = stats->tests; ts; ts = ts->next) { - if (is_disabled(ts->test, stats->suite)) { - criterion_important("ok - %s::%s %s # SKIP %s is disabled\n", - ts->test->category, - ts->test->name, - DEF(ts->test->data->description, ""), - ts->test->data->disabled ? "test" : "suite"); - } - } -} - -void tap_log_post_test(struct criterion_test_stats *stats) { +static void print_test_normal(struct criterion_test_stats *stats) { const char *format = can_measure_time() ? "%s - %s::%s %s (%3.2fs)\n" : "%s - %s::%s %s\n"; criterion_important(format, @@ -109,7 +87,7 @@ void tap_log_post_test(struct criterion_test_stats *stats) { } } -void tap_log_test_crash(struct criterion_test_stats *stats) { +static void print_test_crashed(struct criterion_test_stats *stats) { bool sf = criterion_options.short_filename; criterion_important("not ok - %s::%s unexpected signal after %s:%u\n", stats->test->category, @@ -118,18 +96,43 @@ void tap_log_test_crash(struct criterion_test_stats *stats) { stats->progress); } -void tap_log_test_timeout(struct criterion_test_stats *stats) { +static void print_test_timeout(struct criterion_test_stats *stats) { criterion_important("not ok - %s::%s timed out (%3.2fs)\n", stats->test->category, stats->test->name, stats->elapsed_time); } +static void print_test(struct criterion_test_stats *ts, + struct criterion_suite_stats *ss) { + + if (is_disabled(ts->test, ss->suite)) { + criterion_important("ok - %s::%s %s # SKIP %s is disabled\n", + ts->test->category, + ts->test->name, + DEF(ts->test->data->description, ""), + ts->test->data->disabled ? "test" : "suite"); + } else if (ts->crashed) { + print_test_crashed(ts); + } else if (ts->timed_out) { + print_test_timeout(ts); + } else { + print_test_normal(ts); + } +} + +void tap_log_post_all(struct criterion_global_stats *stats) { + print_prelude(stats); + + for (struct criterion_suite_stats *ss = stats->suites; ss; ss = ss->next) { + print_pre_suite(ss); + + for (struct criterion_test_stats *ts = ss->tests; ts; ts = ts->next) { + print_test(ts, ss); + } + } +} + struct criterion_output_provider tap_logging = { - .log_pre_all = tap_log_pre_all, - .log_pre_suite = tap_log_pre_suite, - .log_test_crash = tap_log_test_crash, - .log_test_timeout = tap_log_test_timeout, - .log_post_test = tap_log_post_test, - .log_post_suite = tap_log_post_suite, + .log_post_all = tap_log_post_all, }; From 0d17ecc0f58e75510ff745be86ff6cf3c9e289b5 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 2 Oct 2015 14:45:28 +0200 Subject: [PATCH 064/211] Added missing header exports in CMake config --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a9e1bb6..7024e7ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,6 +95,7 @@ set(SOURCE_FILES src/core/runner.h src/core/runner_coroutine.c src/core/runner_coroutine.h + src/core/coroutine.h src/core/worker.c src/core/worker.h src/core/stats.c @@ -104,6 +105,7 @@ set(SOURCE_FILES src/compat/internal.h src/compat/pipe.c src/compat/pipe.h + src/compat/pipe-internal.h src/compat/section.c src/compat/section.h src/compat/process.c @@ -131,6 +133,8 @@ set(SOURCE_FILES src/entry/options.c src/entry/main.c src/entry/entry.c + src/common.h + src/config.h ) if (PCRE_FOUND) @@ -158,6 +162,8 @@ set(INTERFACE_FILES include/criterion/designated-initializer-compat.h include/criterion/preprocess.h include/criterion/alloc.h + include/criterion/parameterized.h + include/criterion/redirect.h ) # Generate the configure file From c3fdc08b02aa9cb3d1924047912f91c17798c871 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 2 Oct 2015 14:58:56 +0200 Subject: [PATCH 065/211] [Issue #64] Prefixed all unprefixed macros with CR_ --- .../valgrind/include/valgrind/valgrind.h | 4 +- include/criterion/abort.h | 2 +- include/criterion/asprintf-compat.h | 2 +- include/criterion/common.h | 82 +++++++++---------- include/criterion/criterion.h | 42 +++++----- include/criterion/hooks.h | 82 +++++++++---------- include/criterion/logging.h | 20 ++--- include/criterion/parameterized.h | 22 ++--- include/criterion/theories.h | 6 +- src/compat/pipe.c | 2 +- src/compat/process.c | 4 +- src/compat/section.h | 6 +- src/core/ordered-set.c | 4 +- src/core/report.c | 72 ++++++++-------- src/core/report.h | 2 +- src/core/runner.c | 20 ++--- src/core/runner.h | 4 +- src/core/stats.c | 22 ++--- src/core/worker.c | 2 +- src/entry/main.c | 4 +- src/io/event.c | 4 +- src/log/logging.c | 10 +-- src/log/normal.c | 38 ++++----- src/log/tap.c | 8 +- src/string/extmatch.c | 6 +- 25 files changed, 238 insertions(+), 232 deletions(-) diff --git a/dependencies/valgrind/include/valgrind/valgrind.h b/dependencies/valgrind/include/valgrind/valgrind.h index bf5620a6..9cfb7003 100644 --- a/dependencies/valgrind/include/valgrind/valgrind.h +++ b/dependencies/valgrind/include/valgrind/valgrind.h @@ -6221,7 +6221,7 @@ static int #if defined(_MSC_VER) __inline #endif -VALGRIND_PRINTF(UNUSED const char *format, ...) +VALGRIND_PRINTF(CR_UNUSED const char *format, ...) { #if defined(NVALGRIND) return 0; @@ -6259,7 +6259,7 @@ static int #if defined(_MSC_VER) __inline #endif -VALGRIND_PRINTF_BACKTRACE(UNUSED const char *format, ...) +VALGRIND_PRINTF_BACKTRACE(CR_UNUSED const char *format, ...) { #if defined(NVALGRIND) return 0; diff --git a/include/criterion/abort.h b/include/criterion/abort.h index 026289f2..449c0de4 100644 --- a/include/criterion/abort.h +++ b/include/criterion/abort.h @@ -28,7 +28,7 @@ CR_BEGIN_C_API -CR_API NORETURN void criterion_abort_test(void); +CR_API CR_NORETURN void criterion_abort_test(void); CR_INLINE static void criterion_continue_test(void) {} CR_END_C_API diff --git a/include/criterion/asprintf-compat.h b/include/criterion/asprintf-compat.h index 6f78efdd..e0316fe8 100644 --- a/include/criterion/asprintf-compat.h +++ b/include/criterion/asprintf-compat.h @@ -34,7 +34,7 @@ CR_BEGIN_C_API -FORMAT(printf, 2, 3) +CR_FORMAT(printf, 2, 3) CR_API int cr_asprintf(char **strp, const char *fmt, ...); CR_API int cr_vasprintf(char **strp, const char *fmt, va_list ap); diff --git a/include/criterion/common.h b/include/criterion/common.h index ae962eb7..41cc2ffa 100644 --- a/include/criterion/common.h +++ b/include/criterion/common.h @@ -52,74 +52,74 @@ # endif # ifdef __APPLE__ -# define SECTION_START_PREFIX __first -# define SECTION_END_PREFIX __last -# define SECTION_START_SUFFIX(Name) __asm("section$start$__DATA$" Name) -# define SECTION_END_SUFFIX(Name) __asm("section$end$__DATA$" Name) -# define SECTION_(Name) CR_ATTRIBUTE(section("__DATA," Name)) -# define SECTION_SUFFIX_ +# define CR_SECTION_START_PREFIX __first +# define CR_SECTION_END_PREFIX __last +# define CR_SECTION_START_SUFFIX(Name) __asm("section$start$__DATA$" Name) +# define CR_SECTION_END_SUFFIX(Name) __asm("section$end$__DATA$" Name) +# define CR_SECTION_(Name) CR_ATTRIBUTE(section("__DATA," Name)) +# define CR_SECTION_SUFFIX_ # elif CR_IS_MSVC -# define SECTION_START_PREFIX __start -# define SECTION_END_PREFIX __stop -# define SECTION_START_SUFFIX(Name) -# define SECTION_END_SUFFIX(Name) -# define SECTION_(Name) \ +# define CR_SECTION_START_PREFIX __start +# define CR_SECTION_END_PREFIX __stop +# define CR_SECTION_START_SUFFIX(Name) +# define CR_SECTION_END_SUFFIX(Name) +# define CR_SECTION_(Name) \ __pragma(data_seg(push)) \ __pragma(section(Name, read)) \ __declspec(allocate(Name)) -# define SECTION_SUFFIX_ \ +# define CR_SECTION_SUFFIX_ \ __pragma(data_seg(pop)) # else -# define SECTION_START_PREFIX __start -# define SECTION_END_PREFIX __stop -# define SECTION_START_SUFFIX(Name) -# define SECTION_END_SUFFIX(Name) -# define SECTION_(Name) CR_ATTRIBUTE(section(Name)) -# define SECTION_SUFFIX_ +# define CR_SECTION_START_PREFIX __start +# define CR_SECTION_END_PREFIX __stop +# define CR_SECTION_START_SUFFIX(Name) +# define CR_SECTION_END_SUFFIX(Name) +# define CR_SECTION_(Name) CR_ATTRIBUTE(section(Name)) +# define CR_SECTION_SUFFIX_ # endif -# define MAKE_IDENTIFIER_(Prefix, Id) MAKE_IDENTIFIER__(Prefix, Id) -# define MAKE_IDENTIFIER__(Prefix, Id) Prefix ## _ ## Id +# define CR_MAKE_IDENTIFIER_(Prefix, Id) CR_MAKE_IDENTIFIER__(Prefix, Id) +# define CR_MAKE_IDENTIFIER__(Prefix, Id) Prefix ## _ ## Id -# define SECTION_START_(Name) MAKE_IDENTIFIER_(SECTION_START_PREFIX, Name) -# define SECTION_END_(Name) MAKE_IDENTIFIER_(SECTION_END_PREFIX, Name) +# define CR_SECTION_START_(Name) CR_MAKE_IDENTIFIER_(CR_SECTION_START_PREFIX, Name) +# define CR_SECTION_END_(Name) CR_MAKE_IDENTIFIER_(CR_SECTION_END_PREFIX, Name) -# define SECTION_START(Name) g_ ## Name ## _section_start -# define SECTION_END(Name) g_ ## Name ## _section_end +# define CR_SECTION_START(Name) g_ ## Name ## _section_start +# define CR_SECTION_END(Name) g_ ## Name ## _section_end -# define DECL_SECTION_LIMITS(Type, Name) DECL_SECTION_LIMITS_(Type, Name) -# define DECL_SECTION_LIMITS_(Type, Name) \ - extern Type SECTION_START_(Name) SECTION_START_SUFFIX(#Name); \ - extern Type SECTION_END_(Name) SECTION_END_SUFFIX(#Name) +# define CR_DECL_SECTION_LIMITS(Type, Name) CR_DECL_SECTION_LIMITS_(Type, Name) +# define CR_DECL_SECTION_LIMITS_(Type, Name) \ + extern Type CR_SECTION_START_(Name) CR_SECTION_START_SUFFIX(#Name); \ + extern Type CR_SECTION_END_(Name) CR_SECTION_END_SUFFIX(#Name) -# define IMPL_SECTION_LIMITS(Type, Name) \ - Type *const SECTION_START(Name) = &SECTION_START_(Name); \ - Type *const SECTION_END(Name) = &SECTION_END_(Name) +# define CR_IMPL_SECTION_LIMITS(Type, Name) \ + Type *const CR_SECTION_START(Name) = &CR_SECTION_START_(Name); \ + Type *const CR_SECTION_END(Name) = &CR_SECTION_END_(Name) # ifdef __GNUC__ -# define UNUSED CR_ATTRIBUTE(unused) -# define NORETURN CR_ATTRIBUTE(noreturn) +# define CR_UNUSED CR_ATTRIBUTE(unused) +# define CR_NORETURN CR_ATTRIBUTE(noreturn) # define CR_INLINE CR_ATTRIBUTE(always_inline) inline # elif CR_IS_MSVC -# define UNUSED -# define NORETURN __declspec(noreturn) +# define CR_UNUSED +# define CR_NORETURN __declspec(noreturn) # define CR_INLINE __forceinline # else -# define UNUSED -# define NORETURN +# define CR_UNUSED +# define CR_NORETURN # define CR_INLINE inline # endif # ifdef _WIN32 -# define SIZE_T_FORMAT "%Iu" +# define CR_SIZE_T_FORMAT "%Iu" # else -# define SIZE_T_FORMAT "%zu" +# define CR_SIZE_T_FORMAT "%zu" # endif # ifdef __GNUC__ -# define FORMAT(Archetype, Index, Ftc) CR_ATTRIBUTE(format(Archetype, Index, Ftc)) +# define CR_FORMAT(Archetype, Index, Ftc) CR_ATTRIBUTE(format(Archetype, Index, Ftc)) # else -# define FORMAT(Archetype, Index, Ftc) +# define CR_FORMAT(Archetype, Index, Ftc) # endif # if defined _WIN32 || defined __CYGWIN__ diff --git a/include/criterion/criterion.h b/include/criterion/criterion.h index 6182434a..549cdcdd 100644 --- a/include/criterion/criterion.h +++ b/include/criterion/criterion.h @@ -30,26 +30,26 @@ # include "assert.h" # include "alloc.h" -# define IDENTIFIER_(Category, Name, Suffix) \ +# define CR_IDENTIFIER_(Category, Name, Suffix) \ Category ## _ ## Name ## _ ## Suffix # ifdef __cplusplus -# define TEST_PROTOTYPE_(Category, Name) \ - extern "C" void IDENTIFIER_(Category, Name, impl)(void) +# define CR_TEST_PROTOTYPE_(Category, Name) \ + extern "C" void CR_IDENTIFIER_(Category, Name, impl)(void) # define CR_LANG CR_LANG_CPP # else -# define TEST_PROTOTYPE_(Category, Name) \ - void IDENTIFIER_(Category, Name, impl)(void) +# define CR_TEST_PROTOTYPE_(Category, Name) \ + void CR_IDENTIFIER_(Category, Name, impl)(void) # define CR_LANG CR_LANG_C # endif -# define SUITE_IDENTIFIER_(Name, Suffix) \ +# define CR_SUITE_IDENTIFIER_(Name, Suffix) \ suite_ ## Name ## _ ## Suffix # define Test(...) CR_EXPAND(Test_(__VA_ARGS__, .sentinel_ = 0)) # define Test_(Category, Name, ...) \ - TEST_PROTOTYPE_(Category, Name); \ - struct criterion_test_extra_data IDENTIFIER_(Category, Name, extra) = \ + CR_TEST_PROTOTYPE_(Category, Name); \ + struct criterion_test_extra_data CR_IDENTIFIER_(Category, Name, extra) = \ CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ .lang_ = CR_LANG, \ .kind_ = CR_TEST_NORMAL, \ @@ -59,32 +59,32 @@ .line_ = __LINE__, \ __VA_ARGS__ \ )); \ - struct criterion_test IDENTIFIER_(Category, Name, meta) = { \ + struct criterion_test CR_IDENTIFIER_(Category, Name, meta) = { \ #Name, \ #Category, \ - IDENTIFIER_(Category, Name, impl), \ - &IDENTIFIER_(Category, Name, extra) \ + CR_IDENTIFIER_(Category, Name, impl), \ + &CR_IDENTIFIER_(Category, Name, extra) \ }; \ - SECTION_("cr_tst") \ - struct criterion_test *IDENTIFIER_(Category, Name, ptr) \ - = &IDENTIFIER_(Category, Name, meta) SECTION_SUFFIX_; \ - TEST_PROTOTYPE_(Category, Name) + CR_SECTION_("cr_tst") \ + struct criterion_test *CR_IDENTIFIER_(Category, Name, ptr) \ + = &CR_IDENTIFIER_(Category, Name, meta) CR_SECTION_SUFFIX_; \ + CR_TEST_PROTOTYPE_(Category, Name) # define TestSuite(...) CR_EXPAND(TestSuite_(__VA_ARGS__, .sentinel_ = 0)) # define TestSuite_(Name, ...) \ - struct criterion_test_extra_data SUITE_IDENTIFIER_(Name, extra) = \ + struct criterion_test_extra_data CR_SUITE_IDENTIFIER_(Name, extra) = \ CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ .file_ = __FILE__, \ .line_ = 0, \ __VA_ARGS__ \ )); \ - struct criterion_suite SUITE_IDENTIFIER_(Name, meta) = { \ + struct criterion_suite CR_SUITE_IDENTIFIER_(Name, meta) = { \ #Name, \ - &SUITE_IDENTIFIER_(Name, extra), \ + &CR_SUITE_IDENTIFIER_(Name, extra), \ }; \ - SECTION_("cr_sts") \ - struct criterion_suite *SUITE_IDENTIFIER_(Name, ptr) \ - = &SUITE_IDENTIFIER_(Name, meta) SECTION_SUFFIX_ + CR_SECTION_("cr_sts") \ + struct criterion_suite *CR_SUITE_IDENTIFIER_(Name, ptr) \ + = &CR_SUITE_IDENTIFIER_(Name, meta) CR_SECTION_SUFFIX_ CR_BEGIN_C_API diff --git a/include/criterion/hooks.h b/include/criterion/hooks.h index 62ab4834..497b0476 100644 --- a/include/criterion/hooks.h +++ b/include/criterion/hooks.h @@ -43,57 +43,57 @@ typedef enum { typedef void (*f_report_hook)(); -# define HOOK_IDENTIFIER_(Suffix) HOOK_IDENTIFIER__(__LINE__, Suffix) -# define HOOK_IDENTIFIER__(Line, Suffix) HOOK_IDENTIFIER___(Line, Suffix) -# define HOOK_IDENTIFIER___(Line, Suffix) hook_l ## Line ## _ ## Suffix +# define CR_HOOK_IDENTIFIER_(Suffix) CR_HOOK_IDENTIFIER__(__LINE__, Suffix) +# define CR_HOOK_IDENTIFIER__(Line, Suffix) CR_HOOK_IDENTIFIER___(Line, Suffix) +# define CR_HOOK_IDENTIFIER___(Line, Suffix) hook_l ## Line ## _ ## Suffix # ifdef __cplusplus -# define HOOK_PROTOTYPE_ \ - extern "C" void HOOK_IDENTIFIER_(impl) +# define CR_HOOK_PROTOTYPE_ \ + extern "C" void CR_HOOK_IDENTIFIER_(impl) # else -# define HOOK_PROTOTYPE_ \ - void HOOK_IDENTIFIER_(impl) +# define CR_HOOK_PROTOTYPE_ \ + void CR_HOOK_IDENTIFIER_(impl) # endif // Section abbreviations -# define HOOK_SECTION_PRE_ALL cr_pra -# define HOOK_SECTION_PRE_SUITE cr_prs -# define HOOK_SECTION_PRE_INIT cr_pri -# define HOOK_SECTION_PRE_TEST cr_prt -# define HOOK_SECTION_ASSERT cr_ast -# define HOOK_SECTION_THEORY_FAIL cr_thf -# define HOOK_SECTION_TEST_CRASH cr_tsc -# define HOOK_SECTION_POST_TEST cr_pot -# define HOOK_SECTION_POST_FINI cr_pof -# define HOOK_SECTION_POST_SUITE cr_pos -# define HOOK_SECTION_POST_ALL cr_poa +# define CR_HOOK_SECTION_PRE_ALL cr_pra +# define CR_HOOK_SECTION_PRE_SUITE cr_prs +# define CR_HOOK_SECTION_PRE_INIT cr_pri +# define CR_HOOK_SECTION_PRE_TEST cr_prt +# define CR_HOOK_SECTION_ASSERT cr_ast +# define CR_HOOK_SECTION_THEORY_FAIL cr_thf +# define CR_HOOK_SECTION_TEST_CRASH cr_tsc +# define CR_HOOK_SECTION_POST_TEST cr_pot +# define CR_HOOK_SECTION_POST_FINI cr_pof +# define CR_HOOK_SECTION_POST_SUITE cr_pos +# define CR_HOOK_SECTION_POST_ALL cr_poa -# define HOOK_SECTION(Kind) HOOK_SECTION_ ## Kind +# define CR_HOOK_SECTION(Kind) CR_HOOK_SECTION_ ## Kind -# define HOOK_SECTION_STRINGIFY__(Sec) #Sec -# define HOOK_SECTION_STRINGIFY_(Sec) HOOK_SECTION_STRINGIFY__(Sec) -# define HOOK_SECTION_STRINGIFY(Kind) HOOK_SECTION_STRINGIFY_(HOOK_SECTION(Kind)) +# define CR_HOOK_SECTION_STRINGIFY__(Sec) #Sec +# define CR_HOOK_SECTION_STRINGIFY_(Sec) CR_HOOK_SECTION_STRINGIFY__(Sec) +# define CR_HOOK_SECTION_STRINGIFY(Kind) CR_HOOK_SECTION_STRINGIFY_(CR_HOOK_SECTION(Kind)) -# define HOOK_PARAM_TYPE_PRE_ALL struct criterion_test_set * -# define HOOK_PARAM_TYPE_PRE_SUITE struct criterion_suite_set * -# define HOOK_PARAM_TYPE_PRE_INIT struct criterion_test * -# define HOOK_PARAM_TYPE_PRE_TEST struct criterion_test * -# define HOOK_PARAM_TYPE_ASSERT struct criterion_assert_stats * -# define HOOK_PARAM_TYPE_THEORY_FAIL struct criterion_theory_stats * -# define HOOK_PARAM_TYPE_TEST_CRASH struct criterion_test_stats * -# define HOOK_PARAM_TYPE_POST_TEST struct criterion_test_stats * -# define HOOK_PARAM_TYPE_POST_FINI struct criterion_test_stats * -# define HOOK_PARAM_TYPE_POST_SUITE struct criterion_suite_stats * -# define HOOK_PARAM_TYPE_POST_ALL struct criterion_global_stats * +# define CR_HOOK_PARAM_TYPE_PRE_ALL struct criterion_test_set * +# define CR_HOOK_PARAM_TYPE_PRE_SUITE struct criterion_suite_set * +# define CR_HOOK_PARAM_TYPE_PRE_INIT struct criterion_test * +# define CR_HOOK_PARAM_TYPE_PRE_TEST struct criterion_test * +# define CR_HOOK_PARAM_TYPE_ASSERT struct criterion_assert_stats * +# define CR_HOOK_PARAM_TYPE_THEORY_FAIL struct criterion_theory_stats * +# define CR_HOOK_PARAM_TYPE_TEST_CRASH struct criterion_test_stats * +# define CR_HOOK_PARAM_TYPE_POST_TEST struct criterion_test_stats * +# define CR_HOOK_PARAM_TYPE_POST_FINI struct criterion_test_stats * +# define CR_HOOK_PARAM_TYPE_POST_SUITE struct criterion_suite_stats * +# define CR_HOOK_PARAM_TYPE_POST_ALL struct criterion_global_stats * -# define HOOK_PARAM_TYPE(Kind) HOOK_PARAM_TYPE_ ## Kind +# define CR_HOOK_PARAM_TYPE(Kind) CR_HOOK_PARAM_TYPE_ ## Kind -# define ReportHook(Kind) \ - HOOK_PROTOTYPE_(HOOK_PARAM_TYPE(Kind)); \ - SECTION_(HOOK_SECTION_STRINGIFY(Kind)) \ - f_report_hook HOOK_IDENTIFIER_(func) = \ - (f_report_hook) HOOK_IDENTIFIER_(impl) \ - SECTION_SUFFIX_; \ - HOOK_PROTOTYPE_ +# define ReportHook(Kind) \ + CR_HOOK_PROTOTYPE_(CR_HOOK_PARAM_TYPE(Kind)); \ + CR_SECTION_(CR_HOOK_SECTION_STRINGIFY(Kind)) \ + f_report_hook CR_HOOK_IDENTIFIER_(func) = \ + (f_report_hook) CR_HOOK_IDENTIFIER_(impl) \ + CR_SECTION_SUFFIX_; \ + CR_HOOK_PROTOTYPE_ #endif /* !CRITERION_HOOKS_H_ */ diff --git a/include/criterion/logging.h b/include/criterion/logging.h index 2f8e1d9f..aca55ce2 100644 --- a/include/criterion/logging.h +++ b/include/criterion/logging.h @@ -65,12 +65,12 @@ struct criterion_prefix_data { # define CRIT_FG_BLUE "\33[0;34m" # define CRIT_RESET "\33[0m" -# define FG_BOLD CRIT_COLOR_NORMALIZE(CRIT_FG_BOLD) -# define FG_RED CRIT_COLOR_NORMALIZE(CRIT_FG_RED) -# define FG_GREEN CRIT_COLOR_NORMALIZE(CRIT_FG_GREEN) -# define FG_GOLD CRIT_COLOR_NORMALIZE(CRIT_FG_GOLD) -# define FG_BLUE CRIT_COLOR_NORMALIZE(CRIT_FG_BLUE) -# define RESET CRIT_COLOR_NORMALIZE(CRIT_RESET) +# define CR_FG_BOLD CRIT_COLOR_NORMALIZE(CRIT_FG_BOLD) +# define CR_FG_RED CRIT_COLOR_NORMALIZE(CRIT_FG_RED) +# define CR_FG_GREEN CRIT_COLOR_NORMALIZE(CRIT_FG_GREEN) +# define CR_FG_GOLD CRIT_COLOR_NORMALIZE(CRIT_FG_GOLD) +# define CR_FG_BLUE CRIT_COLOR_NORMALIZE(CRIT_FG_BLUE) +# define CR_RESET CRIT_COLOR_NORMALIZE(CRIT_RESET) # endif CR_BEGIN_C_API @@ -87,10 +87,10 @@ extern const struct criterion_prefix_data g_criterion_logging_prefixes[]; CR_API void criterion_vlog(enum criterion_logging_level level, const char *msg, va_list args); -FORMAT(printf, 3, 4) +CR_FORMAT(printf, 3, 4) CR_API void criterion_plog(enum criterion_logging_level level, const struct criterion_prefix_data *prefix, const char *msg, ...); -FORMAT(printf, 2, 3) +CR_FORMAT(printf, 2, 3) CR_API void criterion_log(enum criterion_logging_level level, const char *msg, ...); # define criterion_info(...) criterion_log(CRITERION_INFO, __VA_ARGS__) @@ -124,7 +124,7 @@ extern struct criterion_output_provider tap_logging; CR_END_C_API -#define NORMAL_LOGGING (&normal_logging) -#define TAP_LOGGING (&tap_logging) +#define CR_NORMAL_LOGGING (&normal_logging) +#define CR_TAP_LOGGING (&tap_logging) #endif /* !CRITERION_LOGGING_H_ */ diff --git a/include/criterion/parameterized.h b/include/criterion/parameterized.h index d5cde423..cbf0aa30 100644 --- a/include/criterion/parameterized.h +++ b/include/criterion/parameterized.h @@ -9,10 +9,10 @@ # ifdef __cplusplus # define CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name) \ - extern "C" void IDENTIFIER_(Category, Name, impl)(Param) + extern "C" void CR_IDENTIFIER_(Category, Name, impl)(Param) # else # define CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name) \ - void IDENTIFIER_(Category, Name, impl)(Param) + void CR_IDENTIFIER_(Category, Name, impl)(Param) # endif # define ParameterizedTest(...) \ @@ -20,28 +20,28 @@ # define ParameterizedTest_(Param, Category, Name, ...) \ CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name); \ - struct criterion_test_extra_data IDENTIFIER_(Category, Name, extra) = \ + struct criterion_test_extra_data CR_IDENTIFIER_(Category, Name, extra) = \ CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ .kind_ = CR_TEST_PARAMETERIZED, \ - .param_ = IDENTIFIER_(Category, Name, param), \ + .param_ = CR_IDENTIFIER_(Category, Name, param), \ .identifier_ = #Category "/" #Name, \ .file_ = __FILE__, \ .line_ = __LINE__, \ __VA_ARGS__ \ )); \ - struct criterion_test IDENTIFIER_(Category, Name, meta) = { \ + struct criterion_test CR_IDENTIFIER_(Category, Name, meta) = { \ #Name, \ #Category, \ - (void(*)(void)) IDENTIFIER_(Category, Name, impl), \ - &IDENTIFIER_(Category, Name, extra) \ + (void(*)(void)) CR_IDENTIFIER_(Category, Name, impl), \ + &CR_IDENTIFIER_(Category, Name, extra) \ }; \ - SECTION_("cr_tst") \ - struct criterion_test *IDENTIFIER_(Category, Name, ptr) \ - = &IDENTIFIER_(Category, Name, meta) SECTION_SUFFIX_; \ + CR_SECTION_("cr_tst") \ + struct criterion_test *CR_IDENTIFIER_(Category, Name, ptr) \ + = &CR_IDENTIFIER_(Category, Name, meta) CR_SECTION_SUFFIX_; \ CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name) # define ParameterizedTestParameters(Category, Name) \ - static struct criterion_test_params IDENTIFIER_(Category, Name, param)(void) + static struct criterion_test_params CR_IDENTIFIER_(Category, Name, param)(void) # ifdef __cplusplus # define cr_make_param_array(Type, Array, ...) \ diff --git a/include/criterion/theories.h b/include/criterion/theories.h index 5cdf76af..5a1227e7 100644 --- a/include/criterion/theories.h +++ b/include/criterion/theories.h @@ -54,10 +54,10 @@ CR_API void cr_theory_reset(struct criterion_theory_context *ctx); CR_API void cr_theory_call(struct criterion_theory_context *ctx, void (*fnptr)(void)); # define TheoryDataPoints(Category, Name) \ - static struct criterion_datapoints IDENTIFIER_(Category, Name, dps)[] + static struct criterion_datapoints CR_IDENTIFIER_(Category, Name, dps)[] # define TheoryDataPoint(Category, Name) \ - (IDENTIFIER_(Category, Name, dps)) + (CR_IDENTIFIER_(Category, Name, dps)) # ifdef __cplusplus # define CR_TH_VA_NUM(Type, ...) criterion_va_num__(__VA_ARGS__) @@ -127,7 +127,7 @@ struct criterion_datapoints { CR_API void cr_theory_main(struct criterion_datapoints *dps, size_t datapoints, void (*fnptr)(void)); # define CR_VAARG_ID(Suffix, Category, Name, ...) \ - IDENTIFIER_(Category, Name, Suffix) + CR_IDENTIFIER_(Category, Name, Suffix) # define Theory(Args, ...) \ void CR_EXPAND(CR_VAARG_ID(theory, __VA_ARGS__,))Args; \ diff --git a/src/compat/pipe.c b/src/compat/pipe.c index 23c4b4a7..30a3ef12 100644 --- a/src/compat/pipe.c +++ b/src/compat/pipe.c @@ -182,7 +182,7 @@ void pipe_std_redirect(s_pipe_handle *pipe, enum criterion_std_fd fd) { #endif } -void close_pipe_file_handle(void *ptr, UNUSED void *meta) { +void close_pipe_file_handle(void *ptr, CR_UNUSED void *meta) { s_pipe_file_handle *h = ptr; #ifdef VANILLA_WIN32 CloseHandle(h->fh); diff --git a/src/compat/process.c b/src/compat/process.c index 4e6c2869..5b246ac0 100644 --- a/src/compat/process.c +++ b/src/compat/process.c @@ -115,7 +115,7 @@ static struct full_context local_ctx; # error Unsupported compiler. Use GCC or Clang under *nixes. # endif -static void handle_sigchld(UNUSED int sig) { +static void handle_sigchld(CR_UNUSED int sig) { assert(sig == SIGCHLD); int fd = g_worker_pipe->fds[1]; @@ -151,7 +151,7 @@ struct wait_context { }; static void CALLBACK handle_child_terminated(PVOID lpParameter, - UNUSED BOOLEAN TimerOrWaitFired) { + CR_UNUSED BOOLEAN TimerOrWaitFired) { assert(!TimerOrWaitFired); diff --git a/src/compat/section.h b/src/compat/section.h index 9f6359e6..7ff07555 100644 --- a/src/compat/section.h +++ b/src/compat/section.h @@ -24,6 +24,8 @@ #ifndef SECTION_H_ # define SECTION_H_ +# include "criterion/common.h" + # ifdef _WIN32 void *get_win_section_start(const char *section); void *get_win_section_end(const char *section); @@ -39,8 +41,8 @@ void *get_osx_section_end(const char *section); # define GET_SECTION_START(Name) get_osx_section_start(CR_STRINGIFY(Name)) # define GET_SECTION_END(Name) get_osx_section_end(CR_STRINGIFY(Name)) # else -# define GET_SECTION_START(Name) SECTION_START(Name) -# define GET_SECTION_END(Name) SECTION_END(Name) +# define GET_SECTION_START(Name) CR_SECTION_START(Name) +# define GET_SECTION_END(Name) CR_SECTION_END(Name) # endif #endif /* !SECTION_H_ */ diff --git a/src/core/ordered-set.c b/src/core/ordered-set.c index 00630238..fa9c5c5e 100644 --- a/src/core/ordered-set.c +++ b/src/core/ordered-set.c @@ -27,11 +27,11 @@ #include <csptr/smalloc.h> #include "common.h" -static void destroy_ordered_set(void *ptr, UNUSED void *meta) { +static void destroy_ordered_set(void *ptr, CR_UNUSED void *meta) { sfree(((struct criterion_ordered_set *) ptr)->first); } -static INLINE void nothing(UNUSED void *ptr, UNUSED void *meta) {} +static INLINE void nothing(CR_UNUSED void *ptr, CR_UNUSED void *meta) {} static void destroy_ordered_set_node(void *ptr, void *meta) { struct criterion_ordered_set *set = *(void **) meta; diff --git a/src/core/report.c b/src/core/report.c index 025d4849..71123192 100644 --- a/src/core/report.c +++ b/src/core/report.c @@ -36,39 +36,39 @@ static inline void nothing() {} #define IMPL_CALL_REPORT_HOOKS(Kind) \ - IMPL_SECTION_LIMITS(f_report_hook, HOOK_SECTION(Kind)); \ + CR_IMPL_SECTION_LIMITS(f_report_hook, CR_HOOK_SECTION(Kind)); \ void call_report_hooks_##Kind(void *data) { \ - for (f_report_hook *hook = GET_SECTION_START(HOOK_SECTION(Kind)); \ - hook < (f_report_hook*) GET_SECTION_END(HOOK_SECTION(Kind)); \ + for (f_report_hook *hook = GET_SECTION_START(CR_HOOK_SECTION(Kind)); \ + hook < (f_report_hook*) GET_SECTION_END(CR_HOOK_SECTION(Kind)); \ ++hook) { \ (*hook ? *hook : nothing)(data); \ } \ } #ifdef _MSC_VER -f_report_hook SECTION_START_(HOOK_SECTION(PRE_ALL)); -f_report_hook SECTION_START_(HOOK_SECTION(PRE_SUITE)); -f_report_hook SECTION_START_(HOOK_SECTION(PRE_INIT)); -f_report_hook SECTION_START_(HOOK_SECTION(PRE_TEST)); -f_report_hook SECTION_START_(HOOK_SECTION(ASSERT)); -f_report_hook SECTION_START_(HOOK_SECTION(THEORY_FAIL)); -f_report_hook SECTION_START_(HOOK_SECTION(TEST_CRASH)); -f_report_hook SECTION_START_(HOOK_SECTION(POST_TEST)); -f_report_hook SECTION_START_(HOOK_SECTION(POST_FINI)); -f_report_hook SECTION_START_(HOOK_SECTION(POST_SUITE)); -f_report_hook SECTION_START_(HOOK_SECTION(POST_ALL)); +f_report_hook CR_SECTION_START_(CR_HOOK_SECTION(PRE_ALL)); +f_report_hook CR_SECTION_START_(CR_HOOK_SECTION(PRE_SUITE)); +f_report_hook CR_SECTION_START_(CR_HOOK_SECTION(PRE_INIT)); +f_report_hook CR_SECTION_START_(CR_HOOK_SECTION(PRE_TEST)); +f_report_hook CR_SECTION_START_(CR_HOOK_SECTION(ASSERT)); +f_report_hook CR_SECTION_START_(CR_HOOK_SECTION(THEORY_FAIL)); +f_report_hook CR_SECTION_START_(CR_HOOK_SECTION(TEST_CRASH)); +f_report_hook CR_SECTION_START_(CR_HOOK_SECTION(POST_TEST)); +f_report_hook CR_SECTION_START_(CR_HOOK_SECTION(POST_FINI)); +f_report_hook CR_SECTION_START_(CR_HOOK_SECTION(POST_SUITE)); +f_report_hook CR_SECTION_START_(CR_HOOK_SECTION(POST_ALL)); -f_report_hook SECTION_END_(HOOK_SECTION(PRE_ALL)); -f_report_hook SECTION_END_(HOOK_SECTION(PRE_SUITE)); -f_report_hook SECTION_END_(HOOK_SECTION(PRE_INIT)); -f_report_hook SECTION_END_(HOOK_SECTION(PRE_TEST)); -f_report_hook SECTION_END_(HOOK_SECTION(ASSERT)); -f_report_hook SECTION_END_(HOOK_SECTION(THEORY_FAIL)); -f_report_hook SECTION_END_(HOOK_SECTION(TEST_CRASH)); -f_report_hook SECTION_END_(HOOK_SECTION(POST_TEST)); -f_report_hook SECTION_END_(HOOK_SECTION(POST_FINI)); -f_report_hook SECTION_END_(HOOK_SECTION(POST_SUITE)); -f_report_hook SECTION_END_(HOOK_SECTION(POST_ALL)); +f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(PRE_ALL)); +f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(PRE_SUITE)); +f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(PRE_INIT)); +f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(PRE_TEST)); +f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(ASSERT)); +f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(THEORY_FAIL)); +f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(TEST_CRASH)); +f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(POST_TEST)); +f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(POST_FINI)); +f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(POST_SUITE)); +f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(POST_ALL)); #endif IMPL_CALL_REPORT_HOOKS(PRE_ALL); @@ -83,15 +83,15 @@ IMPL_CALL_REPORT_HOOKS(POST_FINI); IMPL_CALL_REPORT_HOOKS(POST_SUITE); IMPL_CALL_REPORT_HOOKS(POST_ALL); -ReportHook(PRE_ALL)(UNUSED struct criterion_test_set *arg) {} -ReportHook(PRE_SUITE)(UNUSED struct criterion_suite_set *arg) {} -ReportHook(PRE_INIT)(UNUSED struct criterion_test *arg) {} -ReportHook(PRE_TEST)(UNUSED struct criterion_test *arg) {} -ReportHook(ASSERT)(UNUSED struct criterion_assert_stats *arg) {} -ReportHook(THEORY_FAIL)(UNUSED struct criterion_theory_stats *arg) {} -ReportHook(TEST_CRASH)(UNUSED struct criterion_test_stats *arg) {} -ReportHook(POST_TEST)(UNUSED struct criterion_test_stats *arg) {} -ReportHook(POST_FINI)(UNUSED struct criterion_test_stats *arg) {} -ReportHook(POST_SUITE)(UNUSED struct criterion_suite_stats *arg) {} -ReportHook(POST_ALL)(UNUSED struct criterion_global_stats *arg) {} +ReportHook(PRE_ALL)(CR_UNUSED struct criterion_test_set *arg) {} +ReportHook(PRE_SUITE)(CR_UNUSED struct criterion_suite_set *arg) {} +ReportHook(PRE_INIT)(CR_UNUSED struct criterion_test *arg) {} +ReportHook(PRE_TEST)(CR_UNUSED struct criterion_test *arg) {} +ReportHook(ASSERT)(CR_UNUSED struct criterion_assert_stats *arg) {} +ReportHook(THEORY_FAIL)(CR_UNUSED struct criterion_theory_stats *arg) {} +ReportHook(TEST_CRASH)(CR_UNUSED struct criterion_test_stats *arg) {} +ReportHook(POST_TEST)(CR_UNUSED struct criterion_test_stats *arg) {} +ReportHook(POST_FINI)(CR_UNUSED struct criterion_test_stats *arg) {} +ReportHook(POST_SUITE)(CR_UNUSED struct criterion_suite_stats *arg) {} +ReportHook(POST_ALL)(CR_UNUSED struct criterion_global_stats *arg) {} diff --git a/src/core/report.h b/src/core/report.h index 69f11266..dfee5ba1 100644 --- a/src/core/report.h +++ b/src/core/report.h @@ -30,7 +30,7 @@ # define report(Kind, Data) call_report_hooks_##Kind(Data) # define DECL_CALL_REPORT_HOOKS(Kind) \ - DECL_SECTION_LIMITS(f_report_hook, HOOK_SECTION(Kind)); \ + CR_DECL_SECTION_LIMITS(f_report_hook, CR_HOOK_SECTION(Kind)); \ void call_report_hooks_##Kind(void *data) DECL_CALL_REPORT_HOOKS(PRE_ALL); diff --git a/src/core/runner.c b/src/core/runner.c index 3ca32815..1f657bf7 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -72,14 +72,14 @@ static msg_t msg_valgrind_jobs = "%sWarning! Criterion has detected " #ifdef _MSC_VER -struct criterion_test *SECTION_START_(cr_tst); -struct criterion_suite *SECTION_START_(cr_sts); -struct criterion_test *SECTION_END_(cr_tst); -struct criterion_suite *SECTION_END_(cr_sts); +struct criterion_test *CR_SECTION_START_(cr_tst); +struct criterion_suite *CR_SECTION_START_(cr_sts); +struct criterion_test *CR_SECTION_END_(cr_tst); +struct criterion_suite *CR_SECTION_END_(cr_sts); #endif -IMPL_SECTION_LIMITS(struct criterion_test*, cr_tst); -IMPL_SECTION_LIMITS(struct criterion_suite*, cr_sts); +CR_IMPL_SECTION_LIMITS(struct criterion_test*, cr_tst); +CR_IMPL_SECTION_LIMITS(struct criterion_suite*, cr_sts); // This is here to make the test suite & test sections non-empty TestSuite(); @@ -97,12 +97,12 @@ int cmp_test(void *a, void *b) { return strcmp(s1->name, s2->name); } -static void dtor_suite_set(void *ptr, UNUSED void *meta) { +static void dtor_suite_set(void *ptr, CR_UNUSED void *meta) { struct criterion_suite_set *s = ptr; sfree(s->tests); } -static void dtor_test_set(void *ptr, UNUSED void *meta) { +static void dtor_test_set(void *ptr, CR_UNUSED void *meta) { struct criterion_test_set *t = ptr; sfree(t->suites); } @@ -425,10 +425,10 @@ static int criterion_run_all_tests_impl(struct criterion_test_set *set) { if (RUNNING_ON_VALGRIND) { if (!criterion_options.no_early_exit) criterion_pimportant(CRITERION_PREFIX_DASHES, - _(msg_valgrind_early_exit), FG_BOLD, RESET); + _(msg_valgrind_early_exit), CR_FG_BOLD, CR_RESET); if (criterion_options.jobs != 1) criterion_pimportant(CRITERION_PREFIX_DASHES, - _(msg_valgrind_jobs), FG_BOLD, RESET); + _(msg_valgrind_jobs), CR_FG_BOLD, CR_RESET); } fflush(NULL); // flush everything before forking diff --git a/src/core/runner.h b/src/core/runner.h index 9b498393..0eafbb78 100644 --- a/src/core/runner.h +++ b/src/core/runner.h @@ -27,8 +27,8 @@ # include "criterion/types.h" # include "compat/pipe.h" -DECL_SECTION_LIMITS(struct criterion_test*, cr_tst); -DECL_SECTION_LIMITS(struct criterion_suite*, cr_sts); +CR_DECL_SECTION_LIMITS(struct criterion_test*, cr_tst); +CR_DECL_SECTION_LIMITS(struct criterion_suite*, cr_sts); struct criterion_test_set *criterion_init(void); void run_test_child(struct criterion_test *test, struct criterion_suite *suite); diff --git a/src/core/stats.c b/src/core/stats.c index bba2f8b2..dd8969b0 100644 --- a/src/core/stats.c +++ b/src/core/stats.c @@ -55,13 +55,13 @@ static void push_test_crash(s_glob_stats *stats, s_test_stats *tstats, void *data); -static void nothing(UNUSED s_glob_stats *stats, - UNUSED s_suite_stats *sstats, - UNUSED s_test_stats *tstats, - UNUSED void *data) { +static void nothing(CR_UNUSED s_glob_stats *stats, + CR_UNUSED s_suite_stats *sstats, + CR_UNUSED s_test_stats *tstats, + CR_UNUSED void *data) { }; -static void destroy_stats(void *ptr, UNUSED void *meta) { +static void destroy_stats(void *ptr, CR_UNUSED void *meta) { s_glob_stats *stats = ptr; for (s_suite_stats *s = stats->suites, *next; s; s = next) { next = s->next; @@ -79,7 +79,7 @@ s_glob_stats *stats_init(void) { return stats; } -static void destroy_suite_stats(void *ptr, UNUSED void *meta) { +static void destroy_suite_stats(void *ptr, CR_UNUSED void *meta) { s_suite_stats *stats = ptr; for (s_test_stats *t = stats->tests, *next; t; t = next) { next = t->next; @@ -97,7 +97,7 @@ s_suite_stats *suite_stats_init(struct criterion_suite *s) { return stats; } -static void destroy_test_stats(void *ptr, UNUSED void *meta) { +static void destroy_test_stats(void *ptr, CR_UNUSED void *meta) { s_test_stats *stats = ptr; for (s_assert_stats *a = stats->asserts, *next; a; a = next) { next = a->next; @@ -147,8 +147,8 @@ void stat_push_event(s_glob_stats *stats, static void push_pre_suite(s_glob_stats *stats, s_suite_stats *suite, - UNUSED s_test_stats *test, - UNUSED void *ptr) { + CR_UNUSED s_test_stats *test, + CR_UNUSED void *ptr) { suite->next = stats->suites; stats->suites = sref(suite); ++stats->nb_suites; @@ -163,7 +163,7 @@ static INLINE bool is_disabled(struct criterion_test *t, static void push_pre_init(s_glob_stats *stats, s_suite_stats *suite, s_test_stats *test, - UNUSED void *ptr) { + CR_UNUSED void *ptr) { test->next = suite->tests; suite->tests = sref(test); ++stats->nb_tests; @@ -230,7 +230,7 @@ static void push_post_test(s_glob_stats *stats, static void push_test_crash(s_glob_stats *stats, s_suite_stats *suite, s_test_stats *test, - UNUSED void *ptr) { + CR_UNUSED void *ptr) { test->failed = 1; test->crashed = 1; ++suite->tests_failed; diff --git a/src/core/worker.c b/src/core/worker.c index 3a6240db..8049fac4 100644 --- a/src/core/worker.c +++ b/src/core/worker.c @@ -47,7 +47,7 @@ bool is_runner(void) { return is_current_process(g_current_proc); } -static void close_process(void *ptr, UNUSED void *meta) { +static void close_process(void *ptr, CR_UNUSED void *meta) { struct worker *proc = ptr; sfree(proc->in); sfree(proc->ctx.suite_stats); diff --git a/src/entry/main.c b/src/entry/main.c index ee1d2e5d..d67989f0 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -102,7 +102,7 @@ int list_tests(bool unicode) { if (!tests) continue; - printf("%s: " SIZE_T_FORMAT " test%s\n", + printf("%s: " CR_SIZE_T_FORMAT " test%s\n", s->suite.name, tests, tests == 1 ? "" : "s"); @@ -206,7 +206,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { } } if (use_tap) - criterion_options.output_provider = TAP_LOGGING; + criterion_options.output_provider = CR_TAP_LOGGING; if (do_print_usage) return print_usage(argv[0]); if (do_print_version) diff --git a/src/io/event.c b/src/io/event.c index 99bdd00e..d7b4dc61 100644 --- a/src/io/event.c +++ b/src/io/event.c @@ -34,12 +34,12 @@ s_pipe_file_handle *g_event_pipe = NULL; -void destroy_event(void *ptr, UNUSED void *meta) { +void destroy_event(void *ptr, CR_UNUSED void *meta) { struct event *ev = ptr; free(ev->data); } -void destroy_assert_event(void *ptr, UNUSED void *meta) { +void destroy_assert_event(void *ptr, CR_UNUSED void *meta) { struct event *ev = ptr; free((void*) ((struct criterion_assert_stats *) ev->data)->message); free(ev->data); diff --git a/src/log/logging.c b/src/log/logging.c index a09b2d71..932337fc 100644 --- a/src/log/logging.c +++ b/src/log/logging.c @@ -63,16 +63,16 @@ void criterion_plog(enum criterion_logging_level level, const struct criterion_p fprintf(stderr, _(ERROR_FORMAT), CRIT_COLOR_NORMALIZE(prefix->color), prefix->prefix, - RESET, - FG_RED, - FG_BOLD, + CR_RESET, + CR_FG_RED, + CR_FG_BOLD, formatted_msg, - RESET); + CR_RESET); } else { fprintf(stderr, _(LOG_FORMAT), CRIT_COLOR_NORMALIZE(prefix->color), prefix->prefix, - RESET, + CR_RESET, formatted_msg); } diff --git a/src/log/normal.c b/src/log/normal.c index b48486aa..e549f1f1 100644 --- a/src/log/normal.c +++ b/src/log/normal.c @@ -94,7 +94,7 @@ static msg_t msg_post_all = "%sSynthesis: Tested: %s%lu%s " "%s\n"; #endif -void normal_log_pre_all(UNUSED struct criterion_test_set *set) { +void normal_log_pre_all(CR_UNUSED struct criterion_test_set *set) { criterion_pinfo(CRITERION_PREFIX_DASHES, _(msg_pre_all), VERSION); } @@ -150,12 +150,12 @@ void normal_log_post_all(struct criterion_global_stats *stats) { criterion_pimportant(CRITERION_PREFIX_EQUALS, _(msg_post_all), - FG_BOLD, - FG_BLUE, (unsigned long) tested, FG_BOLD, - FG_GREEN, (unsigned long) stats->tests_passed, FG_BOLD, - FG_RED, (unsigned long) stats->tests_failed, FG_BOLD, - FG_RED, (unsigned long) stats->tests_crashed, FG_BOLD, - RESET); + CR_FG_BOLD, + CR_FG_BLUE, (unsigned long) tested, CR_FG_BOLD, + CR_FG_GREEN, (unsigned long) stats->tests_passed, CR_FG_BOLD, + CR_FG_RED, (unsigned long) stats->tests_failed, CR_FG_BOLD, + CR_FG_RED, (unsigned long) stats->tests_crashed, CR_FG_BOLD, + CR_RESET); } void normal_log_assert(struct criterion_assert_stats *stats) { @@ -172,8 +172,8 @@ void normal_log_assert(struct criterion_assert_stats *stats) { bool sf = criterion_options.short_filename; criterion_pimportant(CRITERION_PREFIX_DASHES, _(msg_assert_fail), - FG_BOLD, sf ? basename_compat(stats->file) : stats->file, RESET, - FG_RED, stats->line, RESET, + CR_FG_BOLD, sf ? basename_compat(stats->file) : stats->file, CR_RESET, + CR_FG_RED, stats->line, CR_RESET, line); #ifdef VANILLA_WIN32 @@ -190,30 +190,30 @@ void normal_log_test_crash(struct criterion_test_stats *stats) { bool sf = criterion_options.short_filename; criterion_pimportant(CRITERION_PREFIX_DASHES, _(msg_test_crash_line), - FG_BOLD, sf ? basename_compat(stats->file) : stats->file, RESET, - FG_RED, stats->progress, RESET); + CR_FG_BOLD, sf ? basename_compat(stats->file) : stats->file, CR_RESET, + CR_FG_RED, stats->progress, CR_RESET); criterion_pimportant(CRITERION_PREFIX_FAIL, _(msg_test_crash), stats->test->category, stats->test->name); } -void normal_log_other_crash(UNUSED struct criterion_test_stats *stats) { +void normal_log_other_crash(CR_UNUSED struct criterion_test_stats *stats) { criterion_pimportant(CRITERION_PREFIX_DASHES, _(msg_test_other_crash), - FG_BOLD, stats->test->category, stats->test->name, RESET); + CR_FG_BOLD, stats->test->category, stats->test->name, CR_RESET); } -void normal_log_abnormal_exit(UNUSED struct criterion_test_stats *stats) { +void normal_log_abnormal_exit(CR_UNUSED struct criterion_test_stats *stats) { criterion_pimportant(CRITERION_PREFIX_DASHES, _(msg_test_abnormal_exit), - FG_BOLD, stats->test->category, stats->test->name, RESET); + CR_FG_BOLD, stats->test->category, stats->test->name, CR_RESET); } void normal_log_pre_suite(struct criterion_suite_set *set) { criterion_pinfo(CRITERION_PREFIX_EQUALS, _s(msg_pre_suite[0], msg_pre_suite[1], set->tests->size), - FG_BLUE, (unsigned long) set->tests->size, RESET, - FG_GOLD, set->suite.name, RESET); + CR_FG_BLUE, (unsigned long) set->tests->size, CR_RESET, + CR_FG_GOLD, set->suite.name, CR_RESET); } void normal_log_theory_fail(struct criterion_theory_stats *stats) { @@ -224,7 +224,7 @@ void normal_log_theory_fail(struct criterion_theory_stats *stats) { stats->formatted_args); } -void normal_log_test_timeout(UNUSED struct criterion_test_stats *stats) { +void normal_log_test_timeout(CR_UNUSED struct criterion_test_stats *stats) { criterion_pimportant(CRITERION_PREFIX_FAIL, _(msg_test_timeout), stats->test->category, @@ -232,7 +232,7 @@ void normal_log_test_timeout(UNUSED struct criterion_test_stats *stats) { stats->elapsed_time); } -void normal_log_test_abort(UNUSED struct criterion_test_stats *stats, const char *msg) { +void normal_log_test_abort(CR_UNUSED struct criterion_test_stats *stats, const char *msg) { char *dup = strdup(msg); diff --git a/src/log/tap.c b/src/log/tap.c index 3a482318..70edb148 100644 --- a/src/log/tap.c +++ b/src/log/tap.c @@ -39,12 +39,16 @@ #endif static void print_prelude(struct criterion_global_stats *stats) { - criterion_important("TAP version 13\n1.." SIZE_T_FORMAT "\n", stats->nb_tests); + criterion_important("TAP version 13\n1.." + CR_SIZE_T_FORMAT + "\n", stats->nb_tests); criterion_important("# Criterion v%s\n", VERSION); } static void print_pre_suite(struct criterion_suite_stats *stats) { - criterion_important("\n# Running " SIZE_T_FORMAT " tests from %s\n", + criterion_important("\n# Running " + CR_SIZE_T_FORMAT + " tests from %s\n", stats->nb_tests, stats->suite->name); } diff --git a/src/string/extmatch.c b/src/string/extmatch.c index e6c75fc0..b838ff94 100644 --- a/src/string/extmatch.c +++ b/src/string/extmatch.c @@ -127,7 +127,7 @@ static inline void handle_special(struct context *ctx, handler_arg strs[5]) { } # define Handler(Name, ...) \ - static void Name(struct context *ctx, UNUSED char c) { \ + static void Name(struct context *ctx, CR_UNUSED char c) { \ handle_special(ctx, (handler_arg[5]) { \ __VA_ARGS__ \ }); \ @@ -146,7 +146,7 @@ Handler(handle_excl, Handler(handle_at, [ELSESTR] = {_, "@"}); # undef _ -static void handle_rbra(struct context *ctx, UNUSED char c) { +static void handle_rbra(struct context *ctx, CR_UNUSED char c) { copy_char(ctx, c); if (peek_char(ctx) == '!') { read_char(ctx); @@ -159,7 +159,7 @@ static void escape_char(struct context *ctx, char c) { copy_char(ctx, c); } -static void escape_pipe(struct context *ctx, UNUSED char c) { +static void escape_pipe(struct context *ctx, CR_UNUSED char c) { if (ctx->depth == 0) copy_char(ctx, '\\'); copy_char(ctx, '|'); From 4148d3d5d450ffc26c720b531c14df5ff478de5c Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 2 Oct 2015 15:10:41 +0200 Subject: [PATCH 066/211] [Issue #64] Prefixed all unprefixed API functions and types --- include/criterion/assert.h | 6 +++--- include/criterion/event.h | 2 +- include/criterion/types.h | 2 +- src/compat/process.c | 2 +- src/compat/process.h | 2 +- src/core/abort.c | 2 +- src/core/theories.c | 2 +- src/core/worker.c | 2 +- src/core/worker.h | 2 +- src/core/wrappers/wrap.c | 8 ++++---- src/core/wrappers/wrap.cc | 8 ++++---- src/io/event.c | 2 +- src/string/i18n.c | 2 +- 13 files changed, 21 insertions(+), 21 deletions(-) diff --git a/include/criterion/assert.h b/include/criterion/assert.h index c09fa004..444d6a12 100644 --- a/include/criterion/assert.h +++ b/include/criterion/assert.h @@ -72,7 +72,7 @@ enum criterion_assert_messages { CR_BEGIN_C_API -CR_API char *translate_assert_msg(int msg_index, ...); +CR_API char *cr_translate_assert_msg(int msg_index, ...); CR_END_C_API @@ -90,7 +90,7 @@ CR_END_C_API CR_IDENTITY Arg # define CR_TRANSLATE_DEF_MSG_(...) \ - CR_EXPAND(translate_assert_msg( \ + CR_EXPAND(cr_translate_assert_msg( \ CR_VA_HEAD(__VA_ARGS__), \ "" CR_TRANSLATE_DEF_MSG__(CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__))) \ )) @@ -145,7 +145,7 @@ CR_END_C_API stat->file = __FILE__; \ stat->line = __LINE__; \ \ - send_event(ASSERT, stat, bufsize); \ + criterion_send_event(ASSERT, stat, bufsize); \ CR_STDN free(stat); \ \ if (!passed) \ diff --git a/include/criterion/event.h b/include/criterion/event.h index 51389018..6ccc649d 100644 --- a/include/criterion/event.h +++ b/include/criterion/event.h @@ -33,7 +33,7 @@ CR_BEGIN_C_API -CR_API void send_event(int kind, void *data, size_t size); +CR_API void criterion_send_event(int kind, void *data, size_t size); CR_END_C_API diff --git a/include/criterion/types.h b/include/criterion/types.h index 33540981..27cecdd2 100644 --- a/include/criterion/types.h +++ b/include/criterion/types.h @@ -129,6 +129,6 @@ struct criterion_test_set { size_t tests; }; -typedef void (*f_worker_func)(struct criterion_test *, struct criterion_suite *); +typedef void (*cr_worker_func)(struct criterion_test *, struct criterion_suite *); #endif /* !CRITERION_TYPES_H_ */ diff --git a/src/compat/process.c b/src/compat/process.c index 5b246ac0..08392995 100644 --- a/src/compat/process.c +++ b/src/compat/process.c @@ -98,7 +98,7 @@ struct full_context { struct criterion_test_extra_data test_data; struct criterion_suite suite; struct criterion_test_extra_data suite_data; - f_worker_func func; + cr_worker_func func; struct pipe_handle pipe; struct test_single_param param; HANDLE sync; diff --git a/src/compat/process.h b/src/compat/process.h index 103d835b..8b965ab4 100644 --- a/src/compat/process.h +++ b/src/compat/process.h @@ -40,7 +40,7 @@ typedef struct proc_handle s_proc_handle; struct worker_context { struct criterion_test *test; struct criterion_suite *suite; - f_worker_func func; + cr_worker_func func; struct pipe_handle *pipe; struct test_single_param *param; }; diff --git a/src/core/abort.c b/src/core/abort.c index d8d7c65e..0d32188b 100644 --- a/src/core/abort.c +++ b/src/core/abort.c @@ -46,7 +46,7 @@ void criterion_test_die(const char *msg, ...) { *buf = res + 1; memcpy(buf + 1, formatted_msg, res + 1); - send_event(TEST_ABORT, buf, sizeof (size_t) + res + 1); + criterion_send_event(TEST_ABORT, buf, sizeof(size_t) + res + 1); free(buf); free(formatted_msg); diff --git a/src/core/theories.c b/src/core/theories.c index 1af29bcb..28d0d127 100644 --- a/src/core/theories.c +++ b/src/core/theories.c @@ -222,7 +222,7 @@ void cr_theory_main(struct criterion_datapoints *dps, size_t datapoints, void (* concat_arg(&result.msg, dps, indices, datapoints - 1); result.len = strlen(result.msg) + 1; - send_event(THEORY_FAIL, &result, result.len + sizeof (size_t)); + criterion_send_event(THEORY_FAIL, &result, result.len + sizeof(size_t)); } } diff --git a/src/core/worker.c b/src/core/worker.c index 8049fac4..54d68684 100644 --- a/src/core/worker.c +++ b/src/core/worker.c @@ -91,7 +91,7 @@ void run_worker(struct worker_context *ctx) { } struct worker *spawn_test_worker(struct execution_context *ctx, - f_worker_func func, + cr_worker_func func, s_pipe_handle *pipe) { g_worker_context = (struct worker_context) { .test = ctx->test, diff --git a/src/core/worker.h b/src/core/worker.h index 649e3eb1..414f374c 100644 --- a/src/core/worker.h +++ b/src/core/worker.h @@ -84,7 +84,7 @@ bool is_runner(void); struct process_status wait_proc(struct worker *proc); struct process_status get_status(int status); struct worker *spawn_test_worker(struct execution_context *ctx, - f_worker_func func, + cr_worker_func func, s_pipe_handle *pipe); struct event *worker_read_event(struct worker_set *workers, s_pipe_file_handle *pipe); diff --git a/src/core/wrappers/wrap.c b/src/core/wrappers/wrap.c index 01acf622..38009a2b 100644 --- a/src/core/wrappers/wrap.c +++ b/src/core/wrappers/wrap.c @@ -33,11 +33,11 @@ static INLINE void nothing(void) {} void c_wrap(struct criterion_test *test, struct criterion_suite *suite) { - send_event(PRE_INIT, NULL, 0); + criterion_send_event(PRE_INIT, NULL, 0); if (suite->data) (suite->data->init ? suite->data->init : nothing)(); (test->data->init ? test->data->init : nothing)(); - send_event(PRE_TEST, NULL, 0); + criterion_send_event(PRE_TEST, NULL, 0); struct timespec_compat ts; if (!setjmp(g_pre_test)) { @@ -56,10 +56,10 @@ void c_wrap(struct criterion_test *test, struct criterion_suite *suite) { if (!timer_end(&elapsed_time, &ts)) elapsed_time = -1; - send_event(POST_TEST, &elapsed_time, sizeof (double)); + criterion_send_event(POST_TEST, &elapsed_time, sizeof(double)); (test->data->fini ? test->data->fini : nothing)(); if (suite->data) (suite->data->fini ? suite->data->fini : nothing)(); - send_event(POST_FINI, NULL, 0); + criterion_send_event(POST_FINI, NULL, 0); } diff --git a/src/core/wrappers/wrap.cc b/src/core/wrappers/wrap.cc index f6b140a6..67eeb93f 100644 --- a/src/core/wrappers/wrap.cc +++ b/src/core/wrappers/wrap.cc @@ -38,7 +38,7 @@ static INLINE void nothing(void) {} void cpp_wrap(struct criterion_test *test, struct criterion_suite *suite) { - send_event(PRE_INIT, NULL, 0); + criterion_send_event(PRE_INIT, NULL, 0); try { if (suite->data) (suite->data->init ? suite->data->init : nothing)(); @@ -48,7 +48,7 @@ void cpp_wrap(struct criterion_test *test, struct criterion_suite *suite) { } catch (...) { criterion_test_die("Caught some unexpected exception during the test initialization."); } - send_event(PRE_TEST, NULL, 0); + criterion_send_event(PRE_TEST, NULL, 0); struct timespec_compat ts; if (!setjmp(g_pre_test)) { @@ -73,7 +73,7 @@ void cpp_wrap(struct criterion_test *test, struct criterion_suite *suite) { if (!timer_end(&elapsed_time, &ts)) elapsed_time = -1; - send_event(POST_TEST, &elapsed_time, sizeof (double)); + criterion_send_event(POST_TEST, &elapsed_time, sizeof(double)); try { (test->data->fini ? test->data->fini : nothing)(); if (suite->data) @@ -83,7 +83,7 @@ void cpp_wrap(struct criterion_test *test, struct criterion_suite *suite) { } catch (...) { criterion_test_die("Caught some unexpected exception during the test finalization."); } - send_event(POST_FINI, NULL, 0); + criterion_send_event(POST_FINI, NULL, 0); } diff --git a/src/io/event.c b/src/io/event.c index d7b4dc61..97204267 100644 --- a/src/io/event.c +++ b/src/io/event.c @@ -150,7 +150,7 @@ struct event *read_event(s_pipe_file_handle *f) { } } -void send_event(int kind, void *data, size_t size) { +void criterion_send_event(int kind, void *data, size_t size) { unsigned long long pid = get_process_id(); unsigned char *buf = malloc(sizeof (int) + sizeof (pid) + size); diff --git a/src/string/i18n.c b/src/string/i18n.c index c83a119c..ecc2e4de 100644 --- a/src/string/i18n.c +++ b/src/string/i18n.c @@ -8,7 +8,7 @@ void init_i18n(void) { #endif } -char *translate_assert_msg(int msg_index, ...) { +char *cr_translate_assert_msg(int msg_index, ...) { static char *messages[] = { [CRITERION_ASSERT_MSG_FAIL] = N_("The conditions for this assertion were not met."), [CRITERION_ASSERT_MSG_EXPR_FALSE] = N_("The expression %s is false."), From 1fbcecc520815a5acb2267f6915310109463a698 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 3 Oct 2015 00:54:16 +0200 Subject: [PATCH 067/211] Fixed dummy test still being registered --- src/core/runner.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/runner.c b/src/core/runner.c index 1f657bf7..bbe870a3 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -125,7 +125,7 @@ struct criterion_test_set *criterion_init(void) { struct criterion_ordered_set *suites = new_ordered_set(cmp_suite, dtor_suite_set); FOREACH_SUITE_SEC(s) { - if (!*s) + if (!*s || !*(*s)->name) continue; struct criterion_suite_set css = { @@ -148,7 +148,7 @@ struct criterion_test_set *criterion_init(void) { if (!*test) continue; - if (!(*test)->category) + if (!*(*test)->category || !*(*test)->name) continue; criterion_register_test(set, *test); From 2da6588eab77655dc3de2e8be40725a5c2c38d27 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 3 Oct 2015 02:43:24 +0200 Subject: [PATCH 068/211] Added better integration for multiple native languages tests --- .cmake/Modules/Languages.cmake | 15 +++++++++++ .travis.yml | 1 + CMakeLists.txt | 17 +++++++++--- appveyor.yml | 1 + include/criterion/criterion.h | 16 +++++++++-- include/criterion/parameterized.h | 1 + include/criterion/types.h | 8 +++++- samples/CMakeLists.txt | 27 +++++++++++-------- samples/tests/CMakeLists.txt | 19 ++++++++----- src/config.h.in | 3 +++ src/core/runner.c | 14 +++++----- src/core/wrappers/wrap.cc | 2 +- src/core/wrappers/wrap.h | 10 ++++++- src/core/wrappers/wrappers.c | 45 +++++++++++++++++++++++++++++++ test/CMakeLists.txt | 11 ++++++-- 15 files changed, 156 insertions(+), 34 deletions(-) create mode 100644 .cmake/Modules/Languages.cmake create mode 100644 src/core/wrappers/wrappers.c diff --git a/.cmake/Modules/Languages.cmake b/.cmake/Modules/Languages.cmake new file mode 100644 index 00000000..0ad61d49 --- /dev/null +++ b/.cmake/Modules/Languages.cmake @@ -0,0 +1,15 @@ + +if (NOT LANGUAGES) + set(LANGUAGES "") +endif () + +string(REPLACE "," ";" LANGUAGES "${LANGUAGES}") + +foreach (LANG ${LANGUAGES}) + enable_language(${LANG} OPTIONAL) + if (CMAKE_${LANG}_COMPILER_WORKS) + string(TOUPPER ${LANG} LANG_NAME) + set(${LANG_NAME}_BRIDGE 1) + endif () +endforeach () + diff --git a/.travis.yml b/.travis.yml index 97c285a1..07926e03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,6 +34,7 @@ script: -DCOVERALLS=${COVERAGE} -DCMAKE_BUILD_TYPE=${CONFIGURATION} -DCMAKE_INSTALL_PREFIX=criterion-${TRAVIS_TAG} + -DLANGUAGES=CXX .. - TERM=dumb cmake --build . --target criterion_tests -- -j4 - ctest -j4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 7024e7ce..969a77cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) -project(Criterion C CXX) +project(Criterion C) set(MODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.cmake/Modules") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${MODULE_DIR}) @@ -29,6 +29,10 @@ if (MSVC) include_directories(dependencies/wingetopt/src/) endif () +# Language support + +include(Languages) + # Project setup & environment variables set(PROJECT_VERSION "2.1.0") @@ -40,7 +44,9 @@ add_definitions(-DCRITERION_BUILDING_DLL=1) if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -g -std=gnu99") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -g -std=c++11") + if (CMAKE_CXX_COMPILER_WORKS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -g -std=c++11") + endif () endif () if (MSVC) @@ -85,8 +91,9 @@ find_package(PCRE) # List sources and headers set(SOURCE_FILES + src/core/wrappers/wrap.h src/core/wrappers/wrap.c - src/core/wrappers/wrap.cc + src/core/wrappers/wrappers.c src/core/abort.c src/core/abort.h src/core/report.c @@ -145,6 +152,10 @@ if (PCRE_FOUND) set(HAVE_PCRE 1) endif () +if (CMAKE_CXX_COMPILER_WORKS) + set(SOURCE_FILES ${SOURCE_FILES} src/core/wrappers/wrap.cc) +endif () + set(INTERFACE_FILES include/criterion/assert.h include/criterion/abort.h diff --git a/appveyor.yml b/appveyor.yml index ae991136..4b1cc8d0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -43,6 +43,7 @@ install: -DCTESTS=ON -DCMAKE_INSTALL_PREFIX="criterion-%RELEASE_NAME%" -DCMAKE_BUILD_TYPE="%CONFIGURATION%" + -DLANGUAGES=CXX -G "%GENERATOR%" .. diff --git a/include/criterion/criterion.h b/include/criterion/criterion.h index 549cdcdd..a2f4ae2b 100644 --- a/include/criterion/criterion.h +++ b/include/criterion/criterion.h @@ -33,14 +33,26 @@ # define CR_IDENTIFIER_(Category, Name, Suffix) \ Category ## _ ## Name ## _ ## Suffix +# ifdef __cplusplus +# ifdef __OBJC__ +# define CR_LANG CR_LANG_OBJCXX +# else +# define CR_LANG CR_LANG_CXX +# endif +# else +# ifdef __OBJC__ +# define CR_LANG CR_LANG_OBJC +# else +# define CR_LANG CR_LANG_C +# endif +# endif + # ifdef __cplusplus # define CR_TEST_PROTOTYPE_(Category, Name) \ extern "C" void CR_IDENTIFIER_(Category, Name, impl)(void) -# define CR_LANG CR_LANG_CPP # else # define CR_TEST_PROTOTYPE_(Category, Name) \ void CR_IDENTIFIER_(Category, Name, impl)(void) -# define CR_LANG CR_LANG_C # endif # define CR_SUITE_IDENTIFIER_(Name, Suffix) \ diff --git a/include/criterion/parameterized.h b/include/criterion/parameterized.h index cbf0aa30..2c6d96ca 100644 --- a/include/criterion/parameterized.h +++ b/include/criterion/parameterized.h @@ -22,6 +22,7 @@ CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name); \ struct criterion_test_extra_data CR_IDENTIFIER_(Category, Name, extra) = \ CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ + .lang_ = CR_LANG, \ .kind_ = CR_TEST_PARAMETERIZED, \ .param_ = CR_IDENTIFIER_(Category, Name, param), \ .identifier_ = #Category "/" #Name, \ diff --git a/include/criterion/types.h b/include/criterion/types.h index 27cecdd2..c2c40a2c 100644 --- a/include/criterion/types.h +++ b/include/criterion/types.h @@ -37,9 +37,15 @@ using std::size_t; enum criterion_language { CR_LANG_C, - CR_LANG_CPP, + CR_LANG_CXX, + CR_LANG_OBJC, + CR_LANG_OBJCXX, + + CR_LANG_SIZE_ // leave this at the end }; +extern const char *const cr_language_names[CR_LANG_SIZE_]; + enum criterion_test_kind { CR_TEST_NORMAL, CR_TEST_PARAMETERIZED, diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 7bde575c..136a1e02 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -19,19 +19,24 @@ set(SAMPLES redirect.c parameterized.c - signal.cc - report.cc - suites.cc - fixtures.cc - asserts.cc - more-suites.cc - description.cc - simple.cc - theories.cc - redirect.cc - parameterized.cc ) +if (CMAKE_CXX_COMPILER_WORKS) + set(SAMPLES ${SAMPLES} + signal.cc + report.cc + suites.cc + fixtures.cc + asserts.cc + more-suites.cc + description.cc + simple.cc + theories.cc + redirect.cc + parameterized.cc + ) +endif () + set(SCRIPTS tap_test early_exit diff --git a/samples/tests/CMakeLists.txt b/samples/tests/CMakeLists.txt index b2d2fca4..4a38382e 100644 --- a/samples/tests/CMakeLists.txt +++ b/samples/tests/CMakeLists.txt @@ -5,13 +5,18 @@ set(SAMPLES other-crashes.c theories_regression.c - failmessages.cc - exit.cc - long-messages.cc - other-crashes.cc - theories_regression.cc - - exception.cc ) +if (CMAKE_CXX_COMPILER_WORKS) + set(SAMPLES ${SAMPLES} + failmessages.cc + exit.cc + long-messages.cc + other-crashes.cc + theories_regression.cc + + exception.cc + ) +endif () + add_samples("${CMAKE_CURRENT_LIST_DIR}" "${SAMPLES}") diff --git a/src/config.h.in b/src/config.h.in index fef0a5c9..4bc9f70e 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -5,6 +5,9 @@ #cmakedefine HAVE_PCRE @HAVE_PCRE@ #cmakedefine ENABLE_VALGRIND_ERRORS @ENABLE_VALGRIND_ERRORS@ +#cmakedefine CXX_BRIDGE @CXX_BRIDGE@ +#cmakedefine OBJC_BRIDGE @OBJC_BRIDGE@ + # define LOCALEDIR "${LOCALEDIR}" # define PACKAGE "${PROJECT_NAME}" # define VERSION "${PROJECT_VERSION}" diff --git a/src/core/runner.c b/src/core/runner.c index bbe870a3..cd448559 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -157,11 +157,6 @@ struct criterion_test_set *criterion_init(void) { return set; } -f_wrapper *g_wrappers[] = { - [CR_LANG_C] = c_wrap, - [CR_LANG_CPP] = cpp_wrap, -}; - void run_test_child(struct criterion_test *test, struct criterion_suite *suite) { @@ -174,7 +169,14 @@ void run_test_child(struct criterion_test *test, else if (test->data->timeout != 0) setup_timeout((uint64_t) (test->data->timeout * 1e9)); - g_wrappers[test->data->lang_](test, suite); + if (g_wrappers[test->data->lang_]) { + g_wrappers[test->data->lang_](test, suite); + } else { + criterion_test_die( + "The test is compiled in the %s programming language, but the \n" + "criterion runner have been compiled without its language support.", + cr_language_names[test->data->lang_]); + } } #define push_event(Kind, ...) \ diff --git a/src/core/wrappers/wrap.cc b/src/core/wrappers/wrap.cc index 67eeb93f..b9e2d1ed 100644 --- a/src/core/wrappers/wrap.cc +++ b/src/core/wrappers/wrap.cc @@ -36,7 +36,7 @@ extern "C" { static INLINE void nothing(void) {} -void cpp_wrap(struct criterion_test *test, struct criterion_suite *suite) { +void cxx_wrap(struct criterion_test *test, struct criterion_suite *suite) { criterion_send_event(PRE_INIT, NULL, 0); try { diff --git a/src/core/wrappers/wrap.h b/src/core/wrappers/wrap.h index b7d518f4..5f20da93 100644 --- a/src/core/wrappers/wrap.h +++ b/src/core/wrappers/wrap.h @@ -25,11 +25,19 @@ # define WRAP_H_ # include "criterion/types.h" +# include "config.h" typedef void (f_wrapper)(struct criterion_test *, struct criterion_suite *); void c_wrap(struct criterion_test *test, struct criterion_suite *suite); -void cpp_wrap(struct criterion_test *test, struct criterion_suite *suite); + +# ifdef CXX_BRIDGE +void cxx_wrap(struct criterion_test *test, struct criterion_suite *suite); +# endif + +# ifdef OBJC_BRIDGE +void objc_wrap(struct criterion_test *test, struct criterion_suite *suite); +# endif extern f_wrapper *g_wrappers[]; diff --git a/src/core/wrappers/wrappers.c b/src/core/wrappers/wrappers.c new file mode 100644 index 00000000..a4094e11 --- /dev/null +++ b/src/core/wrappers/wrappers.c @@ -0,0 +1,45 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#include "wrap.h" + +f_wrapper *g_wrappers[CR_LANG_SIZE_] = { + [CR_LANG_C] = c_wrap, + +#ifdef CXX_BRIDGE + [CR_LANG_CXX] = cxx_wrap, +#endif + +#ifdef OBJC_BRIDGE + [CR_LANG_OBJC] = objc_wrap, + [CR_LANG_OBJCXX] = objc_wrap, +#endif +}; + +const char *const cr_language_names[CR_LANG_SIZE_] = { + [CR_LANG_C] = "C", + [CR_LANG_CXX] = "C++", + [CR_LANG_OBJC] = "Objective-C", + [CR_LANG_OBJCXX] = "Objective-C++", +}; + diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index da638527..2899c6b0 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,6 +1,8 @@ if (NOT MSVC) set(CMAKE_C_FLAGS "-std=gnu99 -Wall -Wextra") - set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra") + if (CMAKE_CXX_COMPILER_WORKS) + set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra") + endif () endif () include_directories(../include ../src) @@ -8,9 +10,14 @@ include_directories(../include ../src) set(TEST_SOURCES ordered-set.c asprintf.c - redirect.cc ) +if (CMAKE_CXX_COMPILER_WORKS) + set(TEST_SOURCES ${TEST_SOURCES} + redirect.cc + ) +endif () + add_executable(criterion_unit_tests EXCLUDE_FROM_ALL ${TEST_SOURCES}) target_link_libraries(criterion_unit_tests criterion) From 786e70dd1b5cb094f175c5563819abbab8b0e40f Mon Sep 17 00:00:00 2001 From: Adeel <adeelbm@outlook.com> Date: Sat, 3 Oct 2015 01:08:15 +0300 Subject: [PATCH 069/211] config: Check strtok_s capability. Also cleans up redundancies and adds pragma in `UNUSED` macro. --- .cmake/Modules/Capabilities.cmake | 12 ++++++++++++ CMakeLists.txt | 1 + include/criterion/common.h | 2 +- src/config.h.in | 1 + src/log/normal.c | 27 +++++++-------------------- src/log/tap.c | 19 +++++++++++-------- 6 files changed, 33 insertions(+), 29 deletions(-) create mode 100644 .cmake/Modules/Capabilities.cmake diff --git a/.cmake/Modules/Capabilities.cmake b/.cmake/Modules/Capabilities.cmake new file mode 100644 index 00000000..6b6395e7 --- /dev/null +++ b/.cmake/Modules/Capabilities.cmake @@ -0,0 +1,12 @@ +# Copyright (C) 2015 Franklin "Snaipe" Mathieu. +# Redistribution and use of this file is allowed according to the terms of the MIT license. +# For details see the LICENSE file distributed with Criterion. + +include(CheckPrototypeDefinition) + +check_prototype_definition( + strtok_s + "char *strtok_s(char *strToken, const char *strDelimit, char **context)" + NULL + "string.h" + HAVE_STRTOK_S) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7024e7ce..559f093d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ set(LIBCSPTR_DISABLE_TESTS ON) set(LIBCSPTR_DISABLE_COVERALLS ON) include(Submodules) +include(Capabilities) if (MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS=1) diff --git a/include/criterion/common.h b/include/criterion/common.h index 41cc2ffa..8b547e5c 100644 --- a/include/criterion/common.h +++ b/include/criterion/common.h @@ -101,7 +101,7 @@ # define CR_NORETURN CR_ATTRIBUTE(noreturn) # define CR_INLINE CR_ATTRIBUTE(always_inline) inline # elif CR_IS_MSVC -# define CR_UNUSED +# define CR_UNUSED __pragma(warning(suppress:4100)) # define CR_NORETURN __declspec(noreturn) # define CR_INLINE __forceinline # else diff --git a/src/config.h.in b/src/config.h.in index fef0a5c9..6455bff3 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -4,6 +4,7 @@ #cmakedefine ENABLE_NLS @ENABLE_NLS@ #cmakedefine HAVE_PCRE @HAVE_PCRE@ #cmakedefine ENABLE_VALGRIND_ERRORS @ENABLE_VALGRIND_ERRORS@ +#cmakedefine01 HAVE_STRTOK_S # define LOCALEDIR "${LOCALEDIR}" # define PACKAGE "${PROJECT_NAME}" diff --git a/src/log/normal.c b/src/log/normal.c index e549f1f1..ba86e6fd 100644 --- a/src/log/normal.c +++ b/src/log/normal.c @@ -37,8 +37,13 @@ #include "common.h" #ifdef VANILLA_WIN32 -// fallback to strtok on windows since strtok_s is not available everywhere -# define strtok_r(str, delim, saveptr) strtok(str, delim) +# if HAVE_STRTOK_S +# define strtok_r strtok_s +# else + static char *strtok_r(char *str, const char *delim, CR_UNUSED char **saveptr) { + return strtok(str, delim); + } +# endif #endif #ifdef _MSC_VER @@ -161,13 +166,8 @@ void normal_log_post_all(struct criterion_global_stats *stats) { void normal_log_assert(struct criterion_assert_stats *stats) { if (!stats->passed) { char *dup = strdup(*stats->message ? stats->message : ""); - -#ifdef VANILLA_WIN32 - char *line = strtok(dup, "\n"); -#else char *saveptr = NULL; char *line = strtok_r(dup, "\n", &saveptr); -#endif bool sf = criterion_options.short_filename; criterion_pimportant(CRITERION_PREFIX_DASHES, @@ -176,11 +176,7 @@ void normal_log_assert(struct criterion_assert_stats *stats) { CR_FG_RED, stats->line, CR_RESET, line); -#ifdef VANILLA_WIN32 - while ((line = strtok(NULL, "\n"))) -#else while ((line = strtok_r(NULL, "\n", &saveptr))) -#endif criterion_pimportant(CRITERION_PREFIX_DASHES, _(msg_desc), line); free(dup); } @@ -235,13 +231,8 @@ void normal_log_test_timeout(CR_UNUSED struct criterion_test_stats *stats) { void normal_log_test_abort(CR_UNUSED struct criterion_test_stats *stats, const char *msg) { char *dup = strdup(msg); - -#ifdef VANILLA_WIN32 - char *line = strtok(dup, "\n"); -#else char *saveptr = NULL; char *line = strtok_r(dup, "\n", &saveptr); -#endif criterion_pimportant(CRITERION_PREFIX_DASHES, _(msg_test_abort), @@ -249,11 +240,7 @@ void normal_log_test_abort(CR_UNUSED struct criterion_test_stats *stats, const c stats->test->name, line); -#ifdef VANILLA_WIN32 - while ((line = strtok(NULL, "\n"))) -#else while ((line = strtok_r(NULL, "\n", &saveptr))) -#endif criterion_pimportant(CRITERION_PREFIX_DASHES, _(msg_desc), line); free(dup); diff --git a/src/log/tap.c b/src/log/tap.c index 70edb148..8e3bab97 100644 --- a/src/log/tap.c +++ b/src/log/tap.c @@ -34,6 +34,16 @@ #include "config.h" #include "common.h" +#ifdef VANILLA_WIN32 +# if HAVE_STRTOK_S +# define strtok_r strtok_s +# else + static char *strtok_r(char *str, const char *delim, CR_UNUSED char **saveptr) { + return strtok(str, delim); + } +# endif +#endif + #ifdef _MSC_VER # define strdup _strdup #endif @@ -69,22 +79,15 @@ static void print_test_normal(struct criterion_test_stats *stats) { for (struct criterion_assert_stats *asrt = stats->asserts; asrt; asrt = asrt->next) { if (!asrt->passed) { char *dup = strdup(*asrt->message ? asrt->message : ""); -#ifdef VANILLA_WIN32 - char *line = strtok(dup, "\n"); -#else char *saveptr = NULL; char *line = strtok_r(dup, "\n", &saveptr); -#endif bool sf = criterion_options.short_filename; criterion_important(" %s:%u: Assertion failed: %s\n", sf ? basename_compat(asrt->file) : asrt->file, asrt->line, line); -#ifdef VANILLA_WIN32 - while ((line = strtok(NULL, "\n"))) -#else + while ((line = strtok_r(NULL, "\n", &saveptr))) -#endif criterion_important(" %s\n", line); free(dup); } From 5a1049ce2cdee2485c6bba4811cd8c23ad030390 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 4 Oct 2015 10:49:44 +0200 Subject: [PATCH 070/211] Added Objective-C language support --- .../CMakeDetermineObjectiveCCompiler.cmake | 54 +++++ .../Modules/CMakeObjectiveCCompiler.cmake.in | 10 + .../Modules/CMakeObjectiveCInformation.cmake | 187 ++++++++++++++++++ .../Modules/CMakeTestObjectiveCCompiler.cmake | 62 ++++++ .gitignore | 2 + CMakeLists.txt | 9 + src/config.h.in | 6 +- src/core/wrappers/wrap.m | 96 +++++++++ 8 files changed, 425 insertions(+), 1 deletion(-) create mode 100644 .cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake create mode 100644 .cmake/Modules/CMakeObjectiveCCompiler.cmake.in create mode 100644 .cmake/Modules/CMakeObjectiveCInformation.cmake create mode 100644 .cmake/Modules/CMakeTestObjectiveCCompiler.cmake create mode 100644 src/core/wrappers/wrap.m diff --git a/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake b/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake new file mode 100644 index 00000000..613cd38f --- /dev/null +++ b/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake @@ -0,0 +1,54 @@ +# Copyright (C) 2015 Franklin "Snaipe" Mathieu. +# Redistribution and use of this file is allowed according to the terms of the MIT license. +# For details see the LICENSE file distributed with Criterion. + +include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake) + +if("${CMAKE_GENERATOR}" MATCHES "Visual Studio") +elseif("${CMAKE_GENERATOR}" MATCHES "Xcode") + set(CMAKE_ObjectiveC_COMPILER_XCODE_TYPE sourcecode.m) + _cmake_find_compiler_path(ObjectiveC) +else() + if(NOT CMAKE_ObjectiveC_COMPILER) + set(CMAKE_ObjectiveC_COMPILER_INIT NOTFOUND) + + if(NOT CMAKE_ObjectiveC_COMPILER_INIT) + set(CMAKE_ObjectiveC_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}gcc clang) + endif() + + _cmake_find_compiler(ObjectiveC) + else() + _cmake_find_compiler_path(ObjectiveC) + endif() + mark_as_advanced(CMAKE_ObjectiveC_COMPILER) + + set(CMAKE_ObjectiveC_COMPILER_ID_TEST_FLAGS_FIRST) + set(CMAKE_ObjectiveC_COMPILER_ID_TEST_FLAGS "-c") + +endif() + +if(NOT CMAKE_ObjectiveC_COMPILER_ID_RUN) + set(CMAKE_ObjectiveC_COMPILER_ID_RUN 1) + + # Try to identify the compiler. + set(CMAKE_ObjectiveC_COMPILER_ID) + set(CMAKE_ObjectiveC_PLATFORM_ID) + file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in + CMAKE_ObjectiveC_COMPILER_ID_PLATFORM_CONTENT) + + include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake) + + # we use the same compiler id source than C + CMAKE_DETERMINE_COMPILER_ID(ObjectiveC CFLAGS CMakeCCompilerId.c) + +endif() + +include(CMakeFindBinUtils) + +# configure variables set in this file for fast reload later on +configure_file(${CMAKE_CURRENT_LIST_DIR}/CMakeObjectiveCCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeObjectiveCCompiler.cmake + @ONLY + ) + +set(CMAKE_ObjectiveC_COMPILER_ENV_VAR "OBJCC") diff --git a/.cmake/Modules/CMakeObjectiveCCompiler.cmake.in b/.cmake/Modules/CMakeObjectiveCCompiler.cmake.in new file mode 100644 index 00000000..ab197365 --- /dev/null +++ b/.cmake/Modules/CMakeObjectiveCCompiler.cmake.in @@ -0,0 +1,10 @@ +set(CMAKE_ObjectiveC_COMPILER "@CMAKE_ObjectiveC_COMPILER@") +set(CMAKE_ObjectiveC_COMPILER_ID "@CMAKE_ObjectiveC_COMPILER_ID@") + +set(CMAKE_ObjectiveC_IMPLICIT_LINK_LIBRARIES "@CMAKE_ObjectiveC_IMPLICIT_LINK_LIBRARIES@") + +set(CMAKE_ObjectiveC_COMPILER_LOADED 1) +set(CMAKE_ObjectiveC_COMPILER_WORKS @CMAKE_ObjectiveC_COMPILER_WORKS@) + +set(CMAKE_ObjectiveC_COMPILER_ID_RUN 1) +set(CMAKE_ObjectiveC_SOURCE_FILE_EXTENSIONS m) diff --git a/.cmake/Modules/CMakeObjectiveCInformation.cmake b/.cmake/Modules/CMakeObjectiveCInformation.cmake new file mode 100644 index 00000000..ba3f47cf --- /dev/null +++ b/.cmake/Modules/CMakeObjectiveCInformation.cmake @@ -0,0 +1,187 @@ +if(UNIX) + set(CMAKE_ObjectiveC_OUTPUT_EXTENSION .o) +else() + set(CMAKE_ObjectiveC_OUTPUT_EXTENSION .obj) +endif() + +set(_INCLUDED_FILE 0) +set(_INCLUDED_FILE_2 0) + +# Load compiler-specific information. +if(CMAKE_ObjectiveC_COMPILER_ID) + include(Compiler/${CMAKE_ObjectiveC_COMPILER_ID}-C OPTIONAL) +endif() + +set(CMAKE_BASE_NAME) +get_filename_component(CMAKE_BASE_NAME "${CMAKE_ObjectiveC_COMPILER}" NAME_WE) + +# load a hardware specific file, mostly useful for embedded compilers +if(CMAKE_SYSTEM_PROCESSOR) + if(CMAKE_ObjectiveC_COMPILER_ID) + include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_ObjectiveC_COMPILER_ID}-C-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) + include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_ObjectiveC_COMPILER_ID}-ObjectiveC-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE_2) + endif() + if (NOT _INCLUDED_FILE AND NOT _INCLUDED_FILE_2) + include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL) + endif () +endif() + +# load the system- and compiler specific files +if(CMAKE_ObjectiveC_COMPILER_ID) + include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_ObjectiveC_COMPILER_ID}-C + OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) + include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_ObjectiveC_COMPILER_ID}-ObjectiveC + OPTIONAL RESULT_VARIABLE _INCLUDED_FILE_2) +endif() +if (NOT _INCLUDED_FILE AND _INCLUDED_FILE_2) + include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} + OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) +endif () + +# We specify the compiler information in the system file for some +# platforms, but this language may not have been enabled when the file +# was first included. Include it again to get the language info. +# Remove this when all compiler info is removed from system files. +if (NOT _INCLUDED_FILE) + include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL) +endif () + +if(CMAKE_ObjectiveC_COMPILER_LINKS_STATICALLY) + set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) +endif() + +# This should be included before the _INIT variables are +# used to initialize the cache. Since the rule variables +# have if blocks on them, users can still define them here. +# But, it should still be after the platform file so changes can +# be made to those values. + +if(CMAKE_USER_MAKE_RULES_OVERRIDE) + # Save the full path of the file so try_compile can use it. + include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override) + set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}") +endif() + +if(CMAKE_USER_MAKE_RULES_OVERRIDE_ObjectiveC) + # Save the full path of the file so try_compile can use it. + include(${CMAKE_USER_MAKE_RULES_OVERRIDE_ObjectiveC} RESULT_VARIABLE _override) + set(CMAKE_USER_MAKE_RULES_OVERRIDE_ObjectiveC "${_override}") +endif() + + +# for most systems a module is the same as a shared library +# so unless the variable CMAKE_MODULE_EXISTS is set just +# copy the values from the LIBRARY variables +if(NOT CMAKE_MODULE_EXISTS) + set(CMAKE_SHARED_MODULE_ObjectiveC_FLAGS ${CMAKE_SHARED_LIBRARY_ObjectiveC_FLAGS}) + set(CMAKE_SHARED_MODULE_CREATE_ObjectiveC_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_ObjectiveC_FLAGS}) +endif() + +if(NOT CMAKE_NOT_USING_CONFIG_FLAGS) +# default build type is none + if(NOT CMAKE_NO_BUILD_TYPE) + set (CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_INIT} CACHE STRING + "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.") + endif() + set (CMAKE_ObjectiveC_FLAGS_DEBUG "${CMAKE_ObjectiveC_FLAGS_DEBUG_INIT}" CACHE STRING + "Flags used by the compiler during debug builds.") + set (CMAKE_ObjectiveC_FLAGS_MINSIZEREL "${CMAKE_ObjectiveC_FLAGS_MINSIZEREL_INIT}" CACHE STRING + "Flags used by the compiler during release builds for minimum size.") + set (CMAKE_ObjectiveC_FLAGS_RELEASE "${CMAKE_ObjectiveC_FLAGS_RELEASE_INIT}" CACHE STRING + "Flags used by the compiler during release builds.") + set (CMAKE_ObjectiveC_FLAGS_RELWITHDEBINFO "${CMAKE_ObjectiveC_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING + "Flags used by the compiler during release builds with debug info.") +endif() + +if(CMAKE_ObjectiveC_STANDARD_LIBRARIES_INIT) + set(CMAKE_ObjectiveC_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES_INIT}" + CACHE STRING "Libraries linked by default with all C applications.") + mark_as_advanced(CMAKE_ObjectiveC_STANDARD_LIBRARIES) +endif() + +include(CMakeCommonLanguageInclude) + +# now define the following rule variables + +# CMAKE_ObjectiveC_CREATE_SHARED_LIBRARY +# CMAKE_ObjectiveC_CREATE_SHARED_MODULE +# CMAKE_ObjectiveC_COMPILE_OBJECT +# CMAKE_ObjectiveC_LINK_EXECUTABLE + +# variables supplied by the generator at use time +# <TARGET> +# <TARGET_BASE> the target without the suffix +# <OBJECTS> +# <OBJECT> +# <LINK_LIBRARIES> +# <FLAGS> +# <LINK_FLAGS> + +# C compiler information +# <CMAKE_ObjectiveC_COMPILER> +# <CMAKE_SHARED_LIBRARY_CREATE_ObjectiveC_FLAGS> +# <CMAKE_SHARED_MODULE_CREATE_ObjectiveC_FLAGS> +# <CMAKE_ObjectiveC_LINK_FLAGS> + +# Static library tools +# <CMAKE_AR> +# <CMAKE_RANLIB> + + +# create a C shared library +if(NOT CMAKE_ObjectiveC_CREATE_SHARED_LIBRARY) + set(CMAKE_ObjectiveC_CREATE_SHARED_LIBRARY + "<CMAKE_ObjectiveC_COMPILER> <CMAKE_SHARED_LIBRARY_ObjectiveC_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_ObjectiveC_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") +endif() + +# create a C shared module just copy the shared library rule +if(NOT CMAKE_ObjectiveC_CREATE_SHARED_MODULE) + set(CMAKE_ObjectiveC_CREATE_SHARED_MODULE ${CMAKE_ObjectiveC_CREATE_SHARED_LIBRARY}) +endif() + +# Create a static archive incrementally for large object file counts. +# If CMAKE_ObjectiveC_CREATE_STATIObjectiveC_LIBRARY is set it will override these. +if(NOT DEFINED CMAKE_ObjectiveC_ARCHIVE_CREATE) + set(CMAKE_ObjectiveC_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>") +endif() +if(NOT DEFINED CMAKE_ObjectiveC_ARCHIVE_APPEND) + set(CMAKE_ObjectiveC_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>") +endif() +if(NOT DEFINED CMAKE_ObjectiveC_ARCHIVE_FINISH) + set(CMAKE_ObjectiveC_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>") +endif() + +set(CMAKE_INCLUDE_FLAG_ObjectiveC "-I") +set(CMAKE_ObjectiveC_IMPLICIT_LINK_LIBRARIES objc) + +# compile a C file into an object file +if(NOT CMAKE_ObjectiveC_COMPILE_OBJECT) + set(CMAKE_ObjectiveC_COMPILE_OBJECT + "<CMAKE_ObjectiveC_COMPILER> <DEFINES> <FLAGS> -o <OBJECT> -c <SOURCE>") +endif() + +if(NOT CMAKE_ObjectiveC_LINK_EXECUTABLE) + set(CMAKE_ObjectiveC_LINK_EXECUTABLE + "<CMAKE_ObjectiveC_COMPILER> <FLAGS> <CMAKE_ObjectiveC_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>") +endif() + +if(NOT CMAKE_EXECUTABLE_RUNTIME_ObjectiveC_FLAG) + set(CMAKE_EXECUTABLE_RUNTIME_ObjectiveC_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_ObjectiveC_FLAG}) +endif() + +if(NOT CMAKE_EXECUTABLE_RUNTIME_ObjectiveC_FLAG_SEP) + set(CMAKE_EXECUTABLE_RUNTIME_ObjectiveC_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_ObjectiveC_FLAG_SEP}) +endif() + +if(NOT CMAKE_EXECUTABLE_RPATH_LINK_ObjectiveC_FLAG) + set(CMAKE_EXECUTABLE_RPATH_LINK_ObjectiveC_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_ObjectiveC_FLAG}) +endif() + +mark_as_advanced( + CMAKE_ObjectiveC_FLAGS + CMAKE_ObjectiveC_FLAGS_DEBUG + CMAKE_ObjectiveC_FLAGS_MINSIZEREL + CMAKE_ObjectiveC_FLAGS_RELEASE + CMAKE_ObjectiveC_FLAGS_RELWITHDEBINFO +) +set(CMAKE_ObjectiveC_INFORMATION_LOADED 1) diff --git a/.cmake/Modules/CMakeTestObjectiveCCompiler.cmake b/.cmake/Modules/CMakeTestObjectiveCCompiler.cmake new file mode 100644 index 00000000..e6d5ff10 --- /dev/null +++ b/.cmake/Modules/CMakeTestObjectiveCCompiler.cmake @@ -0,0 +1,62 @@ +if(CMAKE_ObjectiveC_COMPILER_FORCED) + # The compiler configuration was forced by the user. + # Assume the user has configured all compiler information. + set(CMAKE_ObjectiveC_COMPILER_WORKS TRUE) + return() +endif() + +include(CMakeTestCompilerCommon) + +# Remove any cached result from an older CMake version. +# We now store this in CMakeCCompiler.cmake. +unset(CMAKE_ObjectiveC_COMPILER_WORKS CACHE) + +# This file is used by EnableLanguage in cmGlobalGenerator to +# determine that that selected C compiler can actually compile +# and link the most basic of programs. If not, a fatal error +# is set and cmake stops processing commands and will not generate +# any makefiles or projects. +if(NOT CMAKE_ObjectiveC_COMPILER_WORKS) + PrintTestCompilerStatus("ObjectiveC" "") + file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testObjectiveCCompiler.m + "#ifdef __cplusplus\n" + "# error \"The CMAKE_ObjectiveC_COMPILER is set to an ObjectiveC++ compiler\"\n" + "#endif\n" + "int main(int argc, char* argv[])\n" + "{ (void)argv; return argc-1;}\n") +try_compile(CMAKE_ObjectiveC_COMPILER_WORKS ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testObjectiveCCompiler.m + OUTPUT_VARIABLE __CMAKE_ObjectiveC_COMPILER_OUTPUT) + # Move result from cache to normal variable. + set(CMAKE_ObjectiveC_COMPILER_WORKS ${CMAKE_ObjectiveC_COMPILER_WORKS}) + unset(CMAKE_ObjectiveC_COMPILER_WORKS CACHE) + set(ObjectiveC_TEST_WAS_RUN 1) +endif() + +if(NOT CMAKE_ObjectiveC_COMPILER_WORKS) + PrintTestCompilerStatus("ObjectiveC" " -- broken") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining if the ObjectiveC compiler works failed with " + "the following output:\n${__CMAKE_ObjectiveC_COMPILER_OUTPUT}\n\n") +message(FATAL_ERROR "The ObjectiveC compiler \"${CMAKE_ObjectiveC_COMPILER}\" " + "is not able to compile a simple test program.\nIt fails " + "with the following output:\n ${__CMAKE_ObjectiveC_COMPILER_OUTPUT}\n\n" + "CMake will not be able to correctly generate this project.") +else() + if(ObjectiveC_TEST_WAS_RUN) + PrintTestCompilerStatus("ObjectiveC" " -- works") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining if the ObjectiveC compiler works passed with " + "the following output:\n${__CMAKE_ObjectiveC_COMPILER_OUTPUT}\n\n") + endif() + + # Re-configure file + configure_file( + ${CMAKE_CURRENT_LIST_DIR}/CMakeObjectiveCCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeObjectiveCCompiler.cmake + @ONLY + ) + include(${CMAKE_PLATFORM_INFO_DIR}/CMakeObjectiveCCompiler.cmake) +endif() + +unset(__CMAKE_ObjectiveC_COMPILER_OUTPUT) diff --git a/.gitignore b/.gitignore index e28ebbfa..55e2d534 100644 --- a/.gitignore +++ b/.gitignore @@ -10,11 +10,13 @@ !doc/* !*.c +!*.m !*.cc !*.h !*.rst !*.po !*.in +!.cmake/*.cmake !samples/tests/*.sh !samples/*.expected diff --git a/CMakeLists.txt b/CMakeLists.txt index 969a77cc..e0313d87 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,7 @@ if (NOT MSVC) endif () endif () + if (MSVC) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") endif () @@ -156,6 +157,14 @@ if (CMAKE_CXX_COMPILER_WORKS) set(SOURCE_FILES ${SOURCE_FILES} src/core/wrappers/wrap.cc) endif () +if (CMAKE_ObjectiveC_COMPILER_WORKS) + set(CMAKE_ObjectiveC_FLAGS "${CMAKE_ObjectiveC_FLAGS} ${CMAKE_C_FLAGS} -fobjc-exceptions") + if (NOT WIN32) + set(CMAKE_ObjectiveC_FLAGS "${CMAKE_ObjectiveC_FLAGS} -fPIC") + endif () + set(SOURCE_FILES ${SOURCE_FILES} src/core/wrappers/wrap.m) +endif () + set(INTERFACE_FILES include/criterion/assert.h include/criterion/abort.h diff --git a/src/config.h.in b/src/config.h.in index 4bc9f70e..fc911973 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -6,7 +6,11 @@ #cmakedefine ENABLE_VALGRIND_ERRORS @ENABLE_VALGRIND_ERRORS@ #cmakedefine CXX_BRIDGE @CXX_BRIDGE@ -#cmakedefine OBJC_BRIDGE @OBJC_BRIDGE@ +#cmakedefine OBJECTIVEC_BRIDGE @OBJECTIVEC_BRIDGE@ + +# ifdef OBJECTIVEC_BRIDGE +# define OBJC_BRIDGE OBJECTIVEC_BRIDGE +# endif # define LOCALEDIR "${LOCALEDIR}" # define PACKAGE "${PROJECT_NAME}" diff --git a/src/core/wrappers/wrap.m b/src/core/wrappers/wrap.m new file mode 100644 index 00000000..db3f75be --- /dev/null +++ b/src/core/wrappers/wrap.m @@ -0,0 +1,96 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#import <Foundation/Foundation.h> + +#include "criterion/assert.h" +#include "criterion/event.h" + +#include "core/abort.h" +#include "core/report.h" +#include "core/worker.h" +#include "compat/time.h" +#include "wrap.h" +#include "common.h" + +static INLINE void nothing(void) {} + +void objc_wrap(struct criterion_test *test, struct criterion_suite *suite) { + + criterion_send_event(PRE_INIT, NULL, 0); + @try { + if (suite->data) + (suite->data->init ? suite->data->init : nothing)(); + (test->data->init ? test->data->init : nothing)(); + } + @catch (NSException *e) { + NSString *reason = [e reason]; + criterion_test_die("Caught an unexpected exception during the test initialization: %s.", [reason UTF8String]); + } + @catch (...) { + criterion_test_die("Caught some unexpected exception during the test initialization."); + } + criterion_send_event(PRE_TEST, NULL, 0); + + struct timespec_compat ts; + if (!setjmp(g_pre_test)) { + timer_start(&ts); + if (test->test) { + @try { + if (!test->data->param_) { + test->test(); + } else { + void(*param_test_func)(void *) = (void(*)(void*)) test->test; + param_test_func(g_worker_context.param->ptr); + } + } + @catch (NSException *e) { + NSString *reason = [e reason]; + criterion_test_die("Caught an unexpected exception during the test execution: %s.", [reason UTF8String]); + } + @catch (...) { + criterion_test_die("Caught some unexpected exception during the test execution."); + } + } + } + + double elapsed_time; + if (!timer_end(&elapsed_time, &ts)) + elapsed_time = -1; + + criterion_send_event(POST_TEST, &elapsed_time, sizeof(double)); + @try { + (test->data->fini ? test->data->fini : nothing)(); + if (suite->data) + (suite->data->fini ? suite->data->fini : nothing)(); + } + @catch (NSException *e) { + NSString *reason = [e reason]; + criterion_test_die("Caught an unexpected exception during the test finalization: %s.", [reason UTF8String]); + } + @catch (...) { + criterion_test_die("Caught some unexpected exception during the test finalization."); + } + criterion_send_event(POST_FINI, NULL, 0); + +} From 317c851581ace17cefdeab51d053664dc45b38ce Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 5 Oct 2015 11:13:28 +0200 Subject: [PATCH 071/211] Added objective C support on travis builds --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 07926e03..a4a4c06d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,6 +15,7 @@ addons: packages: - gcc-4.9 - g++-4.9 + - gobjc-4.9 env: global: GCOV: gcov-4.9 @@ -34,7 +35,7 @@ script: -DCOVERALLS=${COVERAGE} -DCMAKE_BUILD_TYPE=${CONFIGURATION} -DCMAKE_INSTALL_PREFIX=criterion-${TRAVIS_TAG} - -DLANGUAGES=CXX + -DLANGUAGES=CXX,ObjectiveC .. - TERM=dumb cmake --build . --target criterion_tests -- -j4 - ctest -j4 From 02d46df36048139736dacf354d94cf416da65842 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 5 Oct 2015 13:55:02 +0200 Subject: [PATCH 072/211] Revert "Added objective C support on travis builds" This reverts commit 317c851581ace17cefdeab51d053664dc45b38ce. --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a4a4c06d..07926e03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,6 @@ addons: packages: - gcc-4.9 - g++-4.9 - - gobjc-4.9 env: global: GCOV: gcov-4.9 @@ -35,7 +34,7 @@ script: -DCOVERALLS=${COVERAGE} -DCMAKE_BUILD_TYPE=${CONFIGURATION} -DCMAKE_INSTALL_PREFIX=criterion-${TRAVIS_TAG} - -DLANGUAGES=CXX,ObjectiveC + -DLANGUAGES=CXX .. - TERM=dumb cmake --build . --target criterion_tests -- -j4 - ctest -j4 From 0d3537d891438d59fc61a22e4b4600412f7b9421 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 5 Oct 2015 16:22:16 +0200 Subject: [PATCH 073/211] Refactored strtok_r compatibility layer to compat/posix.h --- po/fr.po | 36 ++++++++++++++++++------------------ src/compat/posix.h | 22 +++++++++++++++++++--- src/log/normal.c | 14 -------------- src/log/tap.c | 14 -------------- 4 files changed, 37 insertions(+), 49 deletions(-) diff --git a/po/fr.po b/po/fr.po index 65717ee0..e6c75a48 100644 --- a/po/fr.po +++ b/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: criterion 2.0.0\n" "Report-Msgid-Bugs-To: franklinmathieu+criterion@gmail.com\n" -"POT-Creation-Date: 2015-10-01 23:09+0200\n" +"POT-Creation-Date: 2015-10-05 16:20+0200\n" "PO-Revision-Date: 2015-04-03 17:58+0200\n" "Last-Translator: <franklinmathieu@gmail.com>\n" "Language-Team: French\n" @@ -18,70 +18,70 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/log/normal.c:50 +#: src/log/normal.c:41 #, c-format msgid "Criterion v%s\n" msgstr "Criterion v%s\n" -#: src/log/normal.c:51 +#: src/log/normal.c:42 #, c-format msgid " %s\n" msgstr " %s\n" -#: src/log/normal.c:54 src/log/normal.c:56 +#: src/log/normal.c:45 src/log/normal.c:47 #, c-format msgid "%1$s::%2$s\n" msgstr "%1$s::%2$s\n" -#: src/log/normal.c:55 +#: src/log/normal.c:46 #, fuzzy, c-format msgid "%1$s::%2$s: (%3$3.2fs)\n" msgstr "%1$s::%2$s: (%3$3.2fs)\n" -#: src/log/normal.c:57 +#: src/log/normal.c:48 #, c-format msgid "%1$s::%2$s: Test is disabled\n" msgstr "%1$s::%2$s: Le test est désactivé\n" -#: src/log/normal.c:58 +#: src/log/normal.c:49 #, c-format msgid "%1$s::%2$s: Suite is disabled\n" msgstr "%1$s::%2$s: La suite est désactivée\n" -#: src/log/normal.c:59 +#: src/log/normal.c:50 #, c-format msgid "%1$s%2$s%3$s:%4$s%5$d%6$s: Assertion failed: %7$s\n" msgstr "%1$s%2$s%3$s:%4$s%5$d%6$s: Échec d'assertion: %7$s\n" -#: src/log/normal.c:60 +#: src/log/normal.c:51 #, fuzzy, c-format msgid " Theory %1$s::%2$s failed with the following parameters: (%3$s)\n" msgstr "" " La théorie %1$s::%2$s a échoué avec les paramètres suivants: (%3$s)\n" -#: src/log/normal.c:61 +#: src/log/normal.c:52 #, fuzzy, c-format msgid "%1$s::%2$s: Timed out. (%3$3.2fs)\n" msgstr "%1$s::%2$s: Délai expiré. (%3$3.2fs)\n" -#: src/log/normal.c:62 +#: src/log/normal.c:53 #, c-format msgid "%1$s%2$s%3$s:%4$s%5$u%6$s: Unexpected signal caught below this line!\n" msgstr "" "%1$s%2$s%3$s:%4$s%5$u%6$s: Un signal inattendu a été reçu après cette " "ligne!\n" -#: src/log/normal.c:63 +#: src/log/normal.c:54 #, c-format msgid "%1$s::%2$s: CRASH!\n" msgstr "%1$s::%2$s: PLANTAGE!\n" -#: src/log/normal.c:64 +#: src/log/normal.c:55 #, fuzzy, c-format msgid "%1$s::%2$s: %3$s\n" msgstr "%1$s::%2$s: (%3$3.2fs)\n" -#: src/log/normal.c:65 +#: src/log/normal.c:56 #, fuzzy, c-format msgid "" "%1$sWarning! The test `%2$s::%3$s` crashed during its setup or teardown." @@ -90,7 +90,7 @@ msgstr "" "%1$sAttention! Le test `%2$s::%3$s` a planté pendant son initialisation ou " "sa finalisation.%4$s\n" -#: src/log/normal.c:66 +#: src/log/normal.c:57 #, fuzzy, c-format msgid "" "%1$sWarning! The test `%2$s::%3$s` exited during its setup or teardown.%4$s\n" @@ -98,14 +98,14 @@ msgstr "" "%1$sAttention! Le test `%2$s::%3$s` a quitté pendant son initialisation ou " "sa finalisation.%4$s\n" -#: src/log/normal.c:67 +#: src/log/normal.c:58 #, c-format msgid "Running %1$s%2$lu%3$s test from %4$s%5$s%6$s:\n" msgid_plural "Running %1$s%2$lu%3$s tests from %4$s%5$s%6$s:\n" msgstr[0] "Lancement de %1$s%2$lu%3$s test dans %4$s%5$s%6$s:\n" msgstr[1] "Lancement de %1$s%2$lu%3$s tests dans %4$s%5$s%6$s:\n" -#: src/log/normal.c:69 +#: src/log/normal.c:60 #, c-format msgid "" "%1$sSynthesis: Tested: %2$s%3$lu%4$s | Passing: %5$s%6$lu%7$s | Failing: %8$s" @@ -114,7 +114,7 @@ msgstr "" "%1$sSynthèse: Testés: %2$s%3$lu%4$s | Validés: %5$s%6$lu%7$s | Échoués: %8$s" "%9$lu%10$s | Plantages: %11$s%12$lu%13$s %14$s\n" -#: src/log/normal.c:85 +#: src/log/normal.c:76 #, fuzzy, c-format msgid "%s::%s: %s\n" msgstr "%1$s::%2$s: (%3$3.2fs)\n" diff --git a/src/compat/posix.h b/src/compat/posix.h index fc0e8d8a..fdd634ca 100644 --- a/src/compat/posix.h +++ b/src/compat/posix.h @@ -24,9 +24,11 @@ #ifndef POSIX_COMPAT_H_ # define POSIX_COMPAT_H_ -#if defined(_WIN32) && !defined(__CYGWIN__) -# define VANILLA_WIN32 -#endif +# include "config.h" + +# if defined(_WIN32) && !defined(__CYGWIN__) +# define VANILLA_WIN32 +# endif # if defined(BSD) \ || defined(__FreeBSD__) \ @@ -45,6 +47,7 @@ # define off64_t _off64_t # endif # include <stdio.h> +# include <string.h> # if defined(__MINGW32__) || defined(__MINGW64__) # undef off_t # undef off64_t @@ -62,6 +65,19 @@ # define SIGPROF 27 # define CR_EXCEPTION_TIMEOUT 0xC0001042 + +# if HAVE_STRTOK_S +# define strtok_r strtok_s +# else +static CR_INLINE char *strtok_r(char *str, const char *delim, CR_UNUSED char **saveptr) { + return strtok(str, delim); +} +# endif + +# ifdef _MSC_VER +# define strdup _strdup +# endif + # else # include <sys/wait.h> # endif diff --git a/src/log/normal.c b/src/log/normal.c index ba86e6fd..78b2ece2 100644 --- a/src/log/normal.c +++ b/src/log/normal.c @@ -36,20 +36,6 @@ #include "config.h" #include "common.h" -#ifdef VANILLA_WIN32 -# if HAVE_STRTOK_S -# define strtok_r strtok_s -# else - static char *strtok_r(char *str, const char *delim, CR_UNUSED char **saveptr) { - return strtok(str, delim); - } -# endif -#endif - -#ifdef _MSC_VER -# define strdup _strdup -#endif - typedef const char *const msg_t; static msg_t msg_pre_all = N_("Criterion v%s\n"); diff --git a/src/log/tap.c b/src/log/tap.c index 8e3bab97..5922fb25 100644 --- a/src/log/tap.c +++ b/src/log/tap.c @@ -34,20 +34,6 @@ #include "config.h" #include "common.h" -#ifdef VANILLA_WIN32 -# if HAVE_STRTOK_S -# define strtok_r strtok_s -# else - static char *strtok_r(char *str, const char *delim, CR_UNUSED char **saveptr) { - return strtok(str, delim); - } -# endif -#endif - -#ifdef _MSC_VER -# define strdup _strdup -#endif - static void print_prelude(struct criterion_global_stats *stats) { criterion_important("TAP version 13\n1.." CR_SIZE_T_FORMAT From a838e7786fcb9b9f84ea596f06c48ff33fcc43e4 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 5 Oct 2015 16:22:55 +0200 Subject: [PATCH 074/211] Added XML logging --- CMakeLists.txt | 1 + include/criterion/logging.h | 2 + src/entry/main.c | 5 + src/log/xml.c | 188 ++++++++++++++++++++++++++++++++++++ 4 files changed, 196 insertions(+) create mode 100644 src/log/xml.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 559f093d..f3b6e5df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,6 +129,7 @@ set(SOURCE_FILES src/log/logging.c src/log/tap.c src/log/normal.c + src/log/xml.c src/string/i18n.c src/string/i18n.h src/entry/options.c diff --git a/include/criterion/logging.h b/include/criterion/logging.h index aca55ce2..450023be 100644 --- a/include/criterion/logging.h +++ b/include/criterion/logging.h @@ -121,10 +121,12 @@ struct criterion_output_provider { extern struct criterion_output_provider normal_logging; extern struct criterion_output_provider tap_logging; +extern struct criterion_output_provider xml_logging; CR_END_C_API #define CR_NORMAL_LOGGING (&normal_logging) #define CR_TAP_LOGGING (&tap_logging) +#define CR_XML_LOGGING (&xml_logging) #endif /* !CRITERION_LOGGING_H_ */ diff --git a/src/entry/main.c b/src/entry/main.c index d67989f0..5c1de36d 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -130,6 +130,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { {"verbose", optional_argument, 0, 'b'}, {"version", no_argument, 0, 'v'}, {"tap", no_argument, 0, 't'}, + {"xml", no_argument, 0, 'x'}, {"help", no_argument, 0, 'h'}, {"list", no_argument, 0, 'l'}, {"ascii", no_argument, 0, 'k'}, @@ -182,6 +183,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { #endif bool use_tap = !strcmp("1", DEF(getenv("CRITERION_ENABLE_TAP"), "0")); + bool use_xml = !strcmp("1", DEF(getenv("CRITERION_ENABLE_XML"), "0")); bool do_list_tests = false; bool do_print_version = false; @@ -199,6 +201,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { case 'p': criterion_options.pattern = optarg; break; #endif case 't': use_tap = true; break; + case 'x': use_xml = true; break; case 'l': do_list_tests = true; break; case 'v': do_print_version = true; break; case 'h': do_print_usage = true; break; @@ -207,6 +210,8 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { } if (use_tap) criterion_options.output_provider = CR_TAP_LOGGING; + else if (use_xml) + criterion_options.output_provider = CR_XML_LOGGING; if (do_print_usage) return print_usage(argv[0]); if (do_print_version) diff --git a/src/log/xml.c b/src/log/xml.c new file mode 100644 index 00000000..eb9be513 --- /dev/null +++ b/src/log/xml.c @@ -0,0 +1,188 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#define _GNU_SOURCE +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "criterion/stats.h" +#include "criterion/logging.h" +#include "criterion/options.h" +#include "criterion/ordered-set.h" +#include "compat/posix.h" +#include "compat/time.h" +#include "config.h" +#include "common.h" + +#define TESTSUITES_PROPERTIES \ + "name=\"Criterion Tests\" " \ + "tests=\"" CR_SIZE_T_FORMAT "\" " \ + "failures=\"" CR_SIZE_T_FORMAT "\" " \ + "errors=\"" CR_SIZE_T_FORMAT "\" " \ + "disabled=\"" CR_SIZE_T_FORMAT "\"" + +#define XML_BASE_TEMPLATE_BEGIN \ + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" \ + "<!-- Tests compiled with Criterion v" VERSION " -->\n" \ + "<testsuites " TESTSUITES_PROPERTIES ">\n" \ + +#define XML_BASE_TEMPLATE_END \ + "</testsuites>\n" + +#define TESTSUITE_PROPERTIES \ + "name=\"%s\" " \ + "tests=\"" CR_SIZE_T_FORMAT "\" " \ + "failures=\"" CR_SIZE_T_FORMAT "\" " \ + "errors=\"" CR_SIZE_T_FORMAT "\" " \ + "disabled=\"" CR_SIZE_T_FORMAT "\" " \ + "skipped=\"" CR_SIZE_T_FORMAT "\"" + +#define XML_TESTSUITE_TEMPLATE_BEGIN \ + " <testsuite " TESTSUITE_PROPERTIES ">\n" + +#define XML_TESTSUITE_TEMPLATE_END \ + " </testsuite>\n" + +#define TEST_PROPERTIES \ + "name=\"%s\" " \ + "assertions=\"" CR_SIZE_T_FORMAT "\" " \ + "status=\"%s\"" + +#define XML_TEST_TEMPLATE_BEGIN \ + " <testcase " TEST_PROPERTIES ">\n" \ + +#define XML_TEST_TEMPLATE_END \ + " </testcase>\n" + +#define XML_TEST_SKIPPED " <skipped/>\n" + +#define LF " " + +#define XML_FAILURE_MSG_ENTRY \ + "%s:%u: %s" LF + +#define XML_TEST_FAILED_TEMPLATE_BEGIN \ + " <failure type=\"assert\" message=\"%d assertion(s) failed.\">" + +#define XML_TEST_FAILED_TEMPLATE_END \ + "</failure>\n" + +#define XML_CRASH_MSG_ENTRY \ + " <error type=\"crash\" message=\"The test crashed.\" />" + +#define XML_TIMEOUT_MSG_ENTRY \ + " <error type=\"timeout\" message=\"The test timed out.\" />" + +static INLINE bool is_disabled(struct criterion_test *t, struct criterion_suite *s) { + return t->data->disabled || (s->data && s->data->disabled); +} + +static CR_INLINE +const char *get_status_string(struct criterion_test_stats *ts, + struct criterion_suite_stats *ss) { + + const char *status = "PASSED"; + if (ts->crashed || ts->timed_out) + status = "ERRORED"; + else if (ts->failed) + status = "FAILED"; + else if (is_disabled(ts->test, ss->suite)) + status = "SKIPPED"; + return status; +} + +static void print_test(struct criterion_test_stats *ts, + struct criterion_suite_stats *ss) { + + criterion_important(XML_TEST_TEMPLATE_BEGIN, + ts->test->name, + (size_t) (ts->passed_asserts + ts->failed_asserts), + get_status_string(ts, ss) + ); + + if (is_disabled(ts->test, ss->suite)) { + criterion_important(XML_TEST_SKIPPED); + } else if (ts->crashed) { + criterion_important(XML_CRASH_MSG_ENTRY); + } else if (ts->timed_out) { + criterion_important(XML_TIMEOUT_MSG_ENTRY); + } else { + if (ts->failed) { + criterion_important(XML_TEST_FAILED_TEMPLATE_BEGIN, ts->failed_asserts); + for (struct criterion_assert_stats *asrt = ts->asserts; asrt; asrt = asrt->next) { + if (!asrt->passed) { + bool sf = criterion_options.short_filename; + char *dup = strdup(*asrt->message ? asrt->message : ""); + char *saveptr = NULL; + char *line = strtok_r(dup, "\n", &saveptr); + + criterion_important(XML_FAILURE_MSG_ENTRY, + sf ? basename_compat(asrt->file) : asrt->file, + asrt->line, + line + ); + + while ((line = strtok_r(NULL, "\n", &saveptr))) + criterion_important(" %s" LF, line); + free(dup); + } + } + criterion_important(XML_TEST_FAILED_TEMPLATE_END); + } + } + + criterion_important(XML_TEST_TEMPLATE_END); +} + +void xml_log_post_all(struct criterion_global_stats *stats) { + criterion_important(XML_BASE_TEMPLATE_BEGIN, + stats->nb_tests, + stats->tests_failed, + stats->tests_crashed, + stats->tests_skipped + ); + + for (struct criterion_suite_stats *ss = stats->suites; ss; ss = ss->next) { + + criterion_important(XML_TESTSUITE_TEMPLATE_BEGIN, + ss->suite->name, + ss->nb_tests, + ss->tests_failed, + ss->tests_crashed, + ss->tests_skipped, + ss->tests_skipped + ); + + for (struct criterion_test_stats *ts = ss->tests; ts; ts = ts->next) { + print_test(ts, ss); + } + + criterion_important(XML_TESTSUITE_TEMPLATE_END); + } + + criterion_important(XML_BASE_TEMPLATE_END); +} + +struct criterion_output_provider xml_logging = { + .log_post_all = xml_log_post_all, +}; From c0e7486df3b422fce7ed9bdcd1fa58da2ce8cefb Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 5 Oct 2015 16:26:25 +0200 Subject: [PATCH 075/211] Added --xml to help message and documentation --- doc/env.rst | 2 ++ src/entry/main.c | 1 + 2 files changed, 3 insertions(+) diff --git a/doc/env.rst b/doc/env.rst index 97ab252c..d3e6aee9 100644 --- a/doc/env.rst +++ b/doc/env.rst @@ -23,6 +23,7 @@ Command line arguments * ``-S or --short-filename``: The filenames are displayed in their short form. * ``--always-succeed``: The process shall exit with a status of ``0``. * ``--tap``: Enables the TAP (Test Anything Protocol) output format. +* ``--xml``: Enables the JUnit4 XML output format. * ``--verbose[=level]``: Makes the output verbose. When provided with an integer, sets the verbosity level to that integer. @@ -71,6 +72,7 @@ Environment variables are alternatives to command line switches when set to 1. * ``CRITERION_ALWAYS_SUCCEED``: Same as ``--always-succeed``. * ``CRITERION_NO_EARLY_EXIT``: Same as ``--no-early-exit``. * ``CRITERION_ENABLE_TAP``: Same as ``--tap``. +* ``CRITERION_ENABLE_XML``: Same as ``--xml``. * ``CRITERION_FAIL_FAST``: Same as ``--fail-fast``. * ``CRITERION_USE_ASCII``: Same as ``--ascii``. * ``CRITERION_JOBS``: Same as ``jobs``. Sets the number of jobs to diff --git a/src/entry/main.c b/src/entry/main.c index 5c1de36d..6b5f914d 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -62,6 +62,7 @@ "name of the source file on a failure\n" \ PATTERN_USAGE \ " --tap: enables TAP formatting\n" \ + " --xml: enables XML formatting\n" \ " --always-succeed: always exit with 0\n" \ " --no-early-exit: do not exit the test worker " \ "prematurely after the test\n" \ From ec6ea154913f4ba91c7318c2f8d2e5d668e95ee2 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 5 Oct 2015 19:11:59 +0200 Subject: [PATCH 076/211] Added IRC channel to README page --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a9d2edb1..cd345d42 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,8 @@ Sample tests can be found in the [sample directory][samples]. ### Getting help -Gitter.im chat room: [](https://gitter.im/Snaipe/Criterion?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +Gitter.im chat room: [](https://gitter.im/Snaipe/Criterion?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +IRC channel: [#criterion][irc-chan] on irc.freenode.net ### Misc @@ -101,3 +102,5 @@ Logo done by [Greehm](http://www.cargocollective.com/pbouigue) [sample-report]: ./samples/report.c [find-module]: ./dev/FindCriterion.cmake + +[irc-chan]: http://webchat.freenode.net/?channels=%23criterion&uio=MTY9dHJ1ZSYyPXRydWUmOT10cnVlJjExPTE5NQ4e From 15f3af54fe0f4a8d4964291b7b188494b7ddb70d Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 5 Oct 2015 19:54:49 +0200 Subject: [PATCH 077/211] Fixed compilation error on MinGW due to how C++ attributes are handled --- src/compat/posix.h | 14 -------------- src/compat/strtok.h | 43 +++++++++++++++++++++++++++++++++++++++++++ src/log/normal.c | 1 + src/log/tap.c | 1 + src/log/xml.c | 1 + 5 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 src/compat/strtok.h diff --git a/src/compat/posix.h b/src/compat/posix.h index fdd634ca..4468f63e 100644 --- a/src/compat/posix.h +++ b/src/compat/posix.h @@ -24,8 +24,6 @@ #ifndef POSIX_COMPAT_H_ # define POSIX_COMPAT_H_ -# include "config.h" - # if defined(_WIN32) && !defined(__CYGWIN__) # define VANILLA_WIN32 # endif @@ -66,18 +64,6 @@ # define SIGPROF 27 # define CR_EXCEPTION_TIMEOUT 0xC0001042 -# if HAVE_STRTOK_S -# define strtok_r strtok_s -# else -static CR_INLINE char *strtok_r(char *str, const char *delim, CR_UNUSED char **saveptr) { - return strtok(str, delim); -} -# endif - -# ifdef _MSC_VER -# define strdup _strdup -# endif - # else # include <sys/wait.h> # endif diff --git a/src/compat/strtok.h b/src/compat/strtok.h new file mode 100644 index 00000000..6dbe96ce --- /dev/null +++ b/src/compat/strtok.h @@ -0,0 +1,43 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef COMPAT_STRTOK_H_ +# define COMPAT_STRTOK_H_ + +# include "config.h" + +# ifdef VANILLA_WIN32 +# if HAVE_STRTOK_S +# define strtok_r strtok_s +# else +static CR_INLINE char *strtok_r(char *str, const char *delim, CR_UNUSED char **saveptr) { + return strtok(str, delim); +} +# endif + +# ifdef _MSC_VER +# define strdup _strdup +# endif +# endif + +#endif /* !COMPAT_STRTOK_H_ */ diff --git a/src/log/normal.c b/src/log/normal.c index 78b2ece2..f7319d38 100644 --- a/src/log/normal.c +++ b/src/log/normal.c @@ -31,6 +31,7 @@ #include "criterion/options.h" #include "criterion/ordered-set.h" #include "compat/posix.h" +#include "compat/strtok.h" #include "compat/time.h" #include "string/i18n.h" #include "config.h" diff --git a/src/log/tap.c b/src/log/tap.c index 5922fb25..c960951e 100644 --- a/src/log/tap.c +++ b/src/log/tap.c @@ -30,6 +30,7 @@ #include "criterion/options.h" #include "criterion/ordered-set.h" #include "compat/posix.h" +#include "compat/strtok.h" #include "compat/time.h" #include "config.h" #include "common.h" diff --git a/src/log/xml.c b/src/log/xml.c index eb9be513..fd7c9d6f 100644 --- a/src/log/xml.c +++ b/src/log/xml.c @@ -30,6 +30,7 @@ #include "criterion/options.h" #include "criterion/ordered-set.h" #include "compat/posix.h" +#include "compat/strtok.h" #include "compat/time.h" #include "config.h" #include "common.h" From 72d47ef43cd6a07d8fb91f4abc3afc7fcb0c0dab Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 6 Oct 2015 14:58:46 +0200 Subject: [PATCH 078/211] Added xml tests --- samples/CMakeLists.txt | 1 + samples/tests/xml_test.sh | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100755 samples/tests/xml_test.sh diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 7bde575c..1d850587 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -34,6 +34,7 @@ set(SAMPLES set(SCRIPTS tap_test + xml_test early_exit verbose list diff --git a/samples/tests/xml_test.sh b/samples/tests/xml_test.sh new file mode 100755 index 00000000..9f0ab261 --- /dev/null +++ b/samples/tests/xml_test.sh @@ -0,0 +1,7 @@ +#!/bin/sh +./simple.c.bin --xml --always-succeed +./signal.c.bin --xml --always-succeed +./asserts.c.bin --xml --always-succeed +./more-suites.c.bin --xml --always-succeed +./long-messages.c.bin --xml --always-succeed +./description.c.bin --xml --always-succeed From 3733c858cb195878f11fb84962346430d339a173 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 6 Oct 2015 15:44:09 +0200 Subject: [PATCH 079/211] Fixed regression tests sometimes failing because of them being time-dependent --- include/criterion/options.h | 1 + samples/CMakeLists.txt | 1 + samples/outputs/asserts.c.bin.err.expected | 4 ++-- samples/outputs/asserts.cc.bin.err.expected | 8 ++++---- samples/outputs/description.c.bin.err.expected | 2 +- .../outputs/description.cc.bin.err.expected | 2 +- .../outputs/parameterized.c.bin.err.expected | 18 +++++++++--------- samples/outputs/report.c.bin.err.expected | 2 +- samples/outputs/report.cc.bin.err.expected | 2 +- samples/outputs/signal.c.bin.err.expected | 2 +- samples/outputs/signal.cc.bin.err.expected | 2 +- samples/outputs/simple.c.bin.err.expected | 2 +- samples/outputs/simple.cc.bin.err.expected | 2 +- .../outputs/failmessages.c.bin.err.expected | 4 ++-- .../outputs/failmessages.cc.bin.err.expected | 4 ++-- .../outputs/long-messages.c.bin.err.expected | 2 +- .../outputs/long-messages.cc.bin.err.expected | 2 +- .../theories_regression.c.bin.err.expected | 4 ++-- .../theories_regression.cc.bin.err.expected | 4 ++-- src/compat/time.c | 9 ++++----- src/entry/main.c | 2 ++ src/entry/options.c | 1 + 22 files changed, 42 insertions(+), 38 deletions(-) diff --git a/include/criterion/options.h b/include/criterion/options.h index 49c05486..ee3a9c37 100644 --- a/include/criterion/options.h +++ b/include/criterion/options.h @@ -37,6 +37,7 @@ struct criterion_options { const char *pattern; bool short_filename; size_t jobs; + bool measure_time; }; CR_BEGIN_C_API diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 7bde575c..ada809f1 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -67,6 +67,7 @@ macro(add_samples DIR_ SAMPLES_) ENVIRONMENT "CRITERION_SHORT_FILENAME=1" ENVIRONMENT "CRITERION_NO_EARLY_EXIT=1" # for coverage ENVIRONMENT "CRITERION_JOBS=1" # for output ordering + ENVIRONMENT "CRITERION_DISABLE_TIME_MEASUREMENTS=1" # do not compare timings ) endif () endforeach() diff --git a/samples/outputs/asserts.c.bin.err.expected b/samples/outputs/asserts.c.bin.err.expected index 95d9a944..10e2e904 100644 --- a/samples/outputs/asserts.c.bin.err.expected +++ b/samples/outputs/asserts.c.bin.err.expected @@ -1,7 +1,7 @@ [[0;34m----[0m] [0;1masserts.c[0m:[0;31m11[0m: Assertion failed: assert is fatal, expect isn't [[0;34m----[0m] [0;1masserts.c[0m:[0;31m12[0m: Assertion failed: This assert runs -[[0;31mFAIL[0m] asserts::base: (0.00s) +[[0;31mFAIL[0m] asserts::base [[0;34m----[0m] [0;1masserts.c[0m:[0;31m17[0m: Assertion failed: You can fail an assertion with a message from anywhere [[0;34m----[0m] [0;1masserts.c[0m:[0;31m18[0m: Assertion failed: The conditions for this assertion were not met. -[[0;31mFAIL[0m] asserts::old_school: (0.00s) +[[0;31mFAIL[0m] asserts::old_school [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m6[0;1m | Passing: [0;32m4[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/outputs/asserts.cc.bin.err.expected b/samples/outputs/asserts.cc.bin.err.expected index ebeb3553..ddc7623e 100644 --- a/samples/outputs/asserts.cc.bin.err.expected +++ b/samples/outputs/asserts.cc.bin.err.expected @@ -1,11 +1,11 @@ [[0;34m----[0m] [0;1masserts.cc[0m:[0;31m83[0m: Assertion failed: The expression (&s1)[0 .. 2] == (&s2)[0 .. 2] is false. -[[0;31mFAIL[0m] asserts::array: (0.00s) +[[0;31mFAIL[0m] asserts::array [[0;34m----[0m] [0;1masserts.cc[0m:[0;31m13[0m: Assertion failed: assert is fatal, expect isn't [[0;34m----[0m] [0;1masserts.cc[0m:[0;31m14[0m: Assertion failed: This assert runs -[[0;31mFAIL[0m] asserts::base: (0.00s) +[[0;31mFAIL[0m] asserts::base [[0;34m----[0m] [0;1masserts.cc[0m:[0;31m89[0m: Assertion failed: The statement `throw std::exception()` did not throw an instance of the `std::bad_alloc` exception. -[[0;31mFAIL[0m] asserts::exception: (0.00s) +[[0;31mFAIL[0m] asserts::exception [[0;34m----[0m] [0;1masserts.cc[0m:[0;31m19[0m: Assertion failed: You can fail an assertion with a message from anywhere [[0;34m----[0m] [0;1masserts.cc[0m:[0;31m20[0m: Assertion failed: The conditions for this assertion were not met. -[[0;31mFAIL[0m] asserts::old_school: (0.00s) +[[0;31mFAIL[0m] asserts::old_school [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m7[0;1m | Passing: [0;32m3[0;1m | Failing: [0;31m4[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/outputs/description.c.bin.err.expected b/samples/outputs/description.c.bin.err.expected index 2cc0d104..ffcd02dd 100644 --- a/samples/outputs/description.c.bin.err.expected +++ b/samples/outputs/description.c.bin.err.expected @@ -1,3 +1,3 @@ [[0;34m----[0m] [0;1mdescription.c[0m:[0;31m4[0m: Assertion failed: The expression 0 is false. -[[0;31mFAIL[0m] misc::failing: (0.00s) +[[0;31mFAIL[0m] misc::failing [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m1[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m1[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/outputs/description.cc.bin.err.expected b/samples/outputs/description.cc.bin.err.expected index b9cebe4b..ff63cc4f 100644 --- a/samples/outputs/description.cc.bin.err.expected +++ b/samples/outputs/description.cc.bin.err.expected @@ -1,3 +1,3 @@ [[0;34m----[0m] [0;1mdescription.cc[0m:[0;31m4[0m: Assertion failed: The expression 0 is false. -[[0;31mFAIL[0m] misc::failing: (0.00s) +[[0;31mFAIL[0m] misc::failing [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m1[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m1[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/outputs/parameterized.c.bin.err.expected b/samples/outputs/parameterized.c.bin.err.expected index a080c6d6..62992988 100644 --- a/samples/outputs/parameterized.c.bin.err.expected +++ b/samples/outputs/parameterized.c.bin.err.expected @@ -1,19 +1,19 @@ [[0;34m----[0m] [0;1mparameterized.c[0m:[0;31m76[0m: Assertion failed: Parameters: (1, 2.000000) -[[0;31mFAIL[0m] params::cleanup: (0.00s) +[[0;31mFAIL[0m] params::cleanup [[0;34m----[0m] [0;1mparameterized.c[0m:[0;31m76[0m: Assertion failed: Parameters: (3, 4.000000) -[[0;31mFAIL[0m] params::cleanup: (0.00s) +[[0;31mFAIL[0m] params::cleanup [[0;34m----[0m] [0;1mparameterized.c[0m:[0;31m76[0m: Assertion failed: Parameters: (5, 6.000000) -[[0;31mFAIL[0m] params::cleanup: (0.00s) +[[0;31mFAIL[0m] params::cleanup [[0;34m----[0m] [0;1mparameterized.c[0m:[0;31m36[0m: Assertion failed: Parameters: (1, 2.000000) -[[0;31mFAIL[0m] params::multiple: (0.00s) +[[0;31mFAIL[0m] params::multiple [[0;34m----[0m] [0;1mparameterized.c[0m:[0;31m36[0m: Assertion failed: Parameters: (3, 4.000000) -[[0;31mFAIL[0m] params::multiple: (0.00s) +[[0;31mFAIL[0m] params::multiple [[0;34m----[0m] [0;1mparameterized.c[0m:[0;31m36[0m: Assertion failed: Parameters: (5, 6.000000) -[[0;31mFAIL[0m] params::multiple: (0.00s) +[[0;31mFAIL[0m] params::multiple [[0;34m----[0m] [0;1mparameterized.c[0m:[0;31m15[0m: Assertion failed: Parameter: foo -[[0;31mFAIL[0m] params::str: (0.00s) +[[0;31mFAIL[0m] params::str [[0;34m----[0m] [0;1mparameterized.c[0m:[0;31m15[0m: Assertion failed: Parameter: bar -[[0;31mFAIL[0m] params::str: (0.00s) +[[0;31mFAIL[0m] params::str [[0;34m----[0m] [0;1mparameterized.c[0m:[0;31m15[0m: Assertion failed: Parameter: baz -[[0;31mFAIL[0m] params::str: (0.00s) +[[0;31mFAIL[0m] params::str [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m9[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m9[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/outputs/report.c.bin.err.expected b/samples/outputs/report.c.bin.err.expected index f08bf9aa..5de68252 100644 --- a/samples/outputs/report.c.bin.err.expected +++ b/samples/outputs/report.c.bin.err.expected @@ -1,3 +1,3 @@ [[0;34m----[0m] [0;1mreport.c[0m:[0;31m5[0m: Assertion failed: The expression 0 is false. -[[0;31mFAIL[0m] sample::test: (0.00s) +[[0;31mFAIL[0m] sample::test [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m1[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m1[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/outputs/report.cc.bin.err.expected b/samples/outputs/report.cc.bin.err.expected index 72c59aa4..0436a29f 100644 --- a/samples/outputs/report.cc.bin.err.expected +++ b/samples/outputs/report.cc.bin.err.expected @@ -1,3 +1,3 @@ [[0;34m----[0m] [0;1mreport.cc[0m:[0;31m5[0m: Assertion failed: The expression 0 is false. -[[0;31mFAIL[0m] sample::test: (0.00s) +[[0;31mFAIL[0m] sample::test [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m1[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m1[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/outputs/signal.c.bin.err.expected b/samples/outputs/signal.c.bin.err.expected index 8bc2b303..02d96bb8 100644 --- a/samples/outputs/signal.c.bin.err.expected +++ b/samples/outputs/signal.c.bin.err.expected @@ -1,4 +1,4 @@ [[0;34m----[0m] [0;1msignal.c[0m:[0;31m16[0m: Unexpected signal caught below this line! [[0;31mFAIL[0m] simple::uncaught: CRASH! -[[0;31mFAIL[0m] simple::wrong_signal: (0.00s) +[[0;31mFAIL[0m] simple::wrong_signal [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m3[0;1m | Passing: [0;32m1[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m1[0;1m [0m diff --git a/samples/outputs/signal.cc.bin.err.expected b/samples/outputs/signal.cc.bin.err.expected index 8ac44c18..8ec51039 100644 --- a/samples/outputs/signal.cc.bin.err.expected +++ b/samples/outputs/signal.cc.bin.err.expected @@ -1,4 +1,4 @@ [[0;34m----[0m] [0;1msignal.cc[0m:[0;31m16[0m: Unexpected signal caught below this line! [[0;31mFAIL[0m] simple::uncaught: CRASH! -[[0;31mFAIL[0m] simple::wrong_signal: (0.00s) +[[0;31mFAIL[0m] simple::wrong_signal [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m3[0;1m | Passing: [0;32m1[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m1[0;1m [0m diff --git a/samples/outputs/simple.c.bin.err.expected b/samples/outputs/simple.c.bin.err.expected index a6878985..4898f354 100644 --- a/samples/outputs/simple.c.bin.err.expected +++ b/samples/outputs/simple.c.bin.err.expected @@ -1,3 +1,3 @@ [[0;34m----[0m] [0;1msimple.c[0m:[0;31m4[0m: Assertion failed: The expression 0 is false. -[[0;31mFAIL[0m] misc::failing: (0.00s) +[[0;31mFAIL[0m] misc::failing [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m1[0;1m | Failing: [0;31m1[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/outputs/simple.cc.bin.err.expected b/samples/outputs/simple.cc.bin.err.expected index 816d6cd4..e2e6e05b 100644 --- a/samples/outputs/simple.cc.bin.err.expected +++ b/samples/outputs/simple.cc.bin.err.expected @@ -1,3 +1,3 @@ [[0;34m----[0m] [0;1msimple.cc[0m:[0;31m4[0m: Assertion failed: The expression 0 is false. -[[0;31mFAIL[0m] misc::failing: (0.00s) +[[0;31mFAIL[0m] misc::failing [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m1[0;1m | Failing: [0;31m1[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/tests/outputs/failmessages.c.bin.err.expected b/samples/tests/outputs/failmessages.c.bin.err.expected index 3a6b0e7a..fc2dc0c6 100644 --- a/samples/tests/outputs/failmessages.c.bin.err.expected +++ b/samples/tests/outputs/failmessages.c.bin.err.expected @@ -17,7 +17,7 @@ [[0;34m----[0m] [0;1mfailmessages.c[0m:[0;31m22[0m: Assertion failed: The expression (as strings) ("abc") <= ("aba") is false. [[0;34m----[0m] [0;1mfailmessages.c[0m:[0;31m23[0m: Assertion failed: The expression (as strings) ("abc") > ("abd") is false. [[0;34m----[0m] [0;1mfailmessages.c[0m:[0;31m24[0m: Assertion failed: The expression (as strings) ("abc") >= ("abd") is false. -[[0;31mFAIL[0m] messages::default: (0.00s) +[[0;31mFAIL[0m] messages::default [[0;34m----[0m] [0;1mfailmessages.c[0m:[0;31m28[0m: Assertion failed: foo bar [[0;34m----[0m] [0;1mfailmessages.c[0m:[0;31m29[0m: Assertion failed: foo bar [[0;34m----[0m] [0;1mfailmessages.c[0m:[0;31m30[0m: Assertion failed: foo bar @@ -37,5 +37,5 @@ [[0;34m----[0m] [0;1mfailmessages.c[0m:[0;31m46[0m: Assertion failed: foo bar [[0;34m----[0m] [0;1mfailmessages.c[0m:[0;31m47[0m: Assertion failed: foo bar [[0;34m----[0m] [0;1mfailmessages.c[0m:[0;31m48[0m: Assertion failed: foo bar -[[0;31mFAIL[0m] messages::user: (0.00s) +[[0;31mFAIL[0m] messages::user [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/tests/outputs/failmessages.cc.bin.err.expected b/samples/tests/outputs/failmessages.cc.bin.err.expected index f060bace..5a573553 100644 --- a/samples/tests/outputs/failmessages.cc.bin.err.expected +++ b/samples/tests/outputs/failmessages.cc.bin.err.expected @@ -21,7 +21,7 @@ [[0;34m----[0m] [0;1mfailmessages.cc[0m:[0;31m28[0m: Assertion failed: The statement `throw std::exception()` did throw an instance of the `std::exception` exception. [[0;34m----[0m] [0;1mfailmessages.cc[0m:[0;31m29[0m: Assertion failed: The statement `{}` did not throw any exception. [[0;34m----[0m] [0;1mfailmessages.cc[0m:[0;31m30[0m: Assertion failed: The statement `throw std::exception()` threw some exception. -[[0;31mFAIL[0m] messages::default: (0.00s) +[[0;31mFAIL[0m] messages::default [[0;34m----[0m] [0;1mfailmessages.cc[0m:[0;31m34[0m: Assertion failed: foo bar [[0;34m----[0m] [0;1mfailmessages.cc[0m:[0;31m35[0m: Assertion failed: foo bar [[0;34m----[0m] [0;1mfailmessages.cc[0m:[0;31m36[0m: Assertion failed: foo bar @@ -45,5 +45,5 @@ [[0;34m----[0m] [0;1mfailmessages.cc[0m:[0;31m57[0m: Assertion failed: foo bar [[0;34m----[0m] [0;1mfailmessages.cc[0m:[0;31m58[0m: Assertion failed: foo bar [[0;34m----[0m] [0;1mfailmessages.cc[0m:[0;31m59[0m: Assertion failed: foo bar -[[0;31mFAIL[0m] messages::user: (0.00s) +[[0;31mFAIL[0m] messages::user [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/tests/outputs/long-messages.c.bin.err.expected b/samples/tests/outputs/long-messages.c.bin.err.expected index 9658ae52..f97a7f4e 100644 --- a/samples/tests/outputs/long-messages.c.bin.err.expected +++ b/samples/tests/outputs/long-messages.c.bin.err.expected @@ -2,5 +2,5 @@ [[0;34m----[0m] A long message [[0;34m----[0m] Spawning multiple lines. [[0;34m----[0m] Formatting is respected. -[[0;31mFAIL[0m] sample::long_msg: (0.00s) +[[0;31mFAIL[0m] sample::long_msg [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m1[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m1[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/tests/outputs/long-messages.cc.bin.err.expected b/samples/tests/outputs/long-messages.cc.bin.err.expected index fa56cf28..0237997c 100644 --- a/samples/tests/outputs/long-messages.cc.bin.err.expected +++ b/samples/tests/outputs/long-messages.cc.bin.err.expected @@ -2,5 +2,5 @@ [[0;34m----[0m] A long message [[0;34m----[0m] Spawning multiple lines. [[0;34m----[0m] Formatting is respected. -[[0;31mFAIL[0m] sample::long_msg: (0.00s) +[[0;31mFAIL[0m] sample::long_msg [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m1[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m1[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/tests/outputs/theories_regression.c.bin.err.expected b/samples/tests/outputs/theories_regression.c.bin.err.expected index 0db8e129..fa88f2bb 100644 --- a/samples/tests/outputs/theories_regression.c.bin.err.expected +++ b/samples/tests/outputs/theories_regression.c.bin.err.expected @@ -8,8 +8,8 @@ [[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) [[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m51[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) -[[0;31mFAIL[0m] theory::gen: (0.00s) +[[0;31mFAIL[0m] theory::gen [[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m34[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 3.14f, 3.14, "test", "other test") -[[0;31mFAIL[0m] theory::misc: (0.00s) +[[0;31mFAIL[0m] theory::misc [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/tests/outputs/theories_regression.cc.bin.err.expected b/samples/tests/outputs/theories_regression.cc.bin.err.expected index a4e378ef..03039376 100644 --- a/samples/tests/outputs/theories_regression.cc.bin.err.expected +++ b/samples/tests/outputs/theories_regression.cc.bin.err.expected @@ -8,8 +8,8 @@ [[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) [[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m53[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) -[[0;31mFAIL[0m] theory::gen: (0.00s) +[[0;31mFAIL[0m] theory::gen [[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m36[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 3.14f, 3.14, "test", "other test") -[[0;31mFAIL[0m] theory::misc: (0.00s) +[[0;31mFAIL[0m] theory::misc [[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/src/compat/time.c b/src/compat/time.c index 14de484f..f8c8fee7 100644 --- a/src/compat/time.c +++ b/src/compat/time.c @@ -2,6 +2,7 @@ #include <inttypes.h> #include <stdlib.h> #include "criterion/common.h" +#include "criterion/options.h" #include "compat/time.h" #include "compat/posix.h" @@ -28,6 +29,9 @@ extern __attribute__ ((weak)) int clock_gettime(clockid_t, struct timespec *); #endif bool can_measure_time(void) { + if (!criterion_options.measure_time) + return false; + #if defined(__unix__) && !defined(__CYGWIN__) return clock_gettime != NULL; #else @@ -128,11 +132,6 @@ int setup_timeout(uint64_t nanos) { CloseHandle(thread); return 0; #elif defined(__unix__) - if (!can_measure_time()) { - errno = ENOTSUP; - return -1; - } - timer_t timer; int res = timer_create(CLOCK_MONOTONIC, &(struct sigevent) { .sigev_notify = SIGEV_SIGNAL, diff --git a/src/entry/main.c b/src/entry/main.c index d67989f0..6de122aa 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -183,6 +183,8 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { bool use_tap = !strcmp("1", DEF(getenv("CRITERION_ENABLE_TAP"), "0")); + opt->measure_time = !!strcmp("1", DEF(getenv("CRITERION_DISABLE_TIME_MEASUREMENTS"), "0")); + bool do_list_tests = false; bool do_print_version = false; bool do_print_usage = false; diff --git a/src/entry/options.c b/src/entry/options.c index c83b294a..20295f92 100644 --- a/src/entry/options.c +++ b/src/entry/options.c @@ -26,4 +26,5 @@ struct criterion_options criterion_options = { .logging_threshold = CRITERION_IMPORTANT, .output_provider = &normal_logging, + .measure_time = true, }; From 06088a856c078714f75cb50368d4a10039609f95 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 6 Oct 2015 16:07:28 +0200 Subject: [PATCH 080/211] [Fixes #72] Added --jobs to help message --- src/entry/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/entry/main.c b/src/entry/main.c index cac5eace..8a8c5269 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -55,6 +55,7 @@ " -v or --version: prints the version of criterion " \ "these tests have been linked against\n" \ " -l or --list: prints all the tests in a list\n" \ + " -jN or --jobs N: use N concurrent jobs\n" \ " -f or --fail-fast: exit after the first failure\n" \ " --ascii: don't use fancy unicode symbols " \ "or colors in the output\n" \ From 2ecb8e164b6ae639514c2a88e94c57156b2e86eb Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 7 Oct 2015 13:07:11 +0200 Subject: [PATCH 081/211] Fixed criterion_handle_args printing an error message on unknown parameters when handle_unknown_arg is true --- src/entry/main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/entry/main.c b/src/entry/main.c index 8a8c5269..007b3201 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -152,6 +152,9 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { textdomain (PACKAGE "-test"); #endif + if (!handle_unknown_arg) + opterr = 0; + char *env_always_succeed = getenv("CRITERION_ALWAYS_SUCCEED"); char *env_no_early_exit = getenv("CRITERION_NO_EARLY_EXIT"); char *env_fail_fast = getenv("CRITERION_FAIL_FAST"); @@ -209,6 +212,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { case 'l': do_list_tests = true; break; case 'v': do_print_version = true; break; case 'h': do_print_usage = true; break; + case '?': default : do_print_usage = handle_unknown_arg; break; } } From 0ee96494469eb3409a15d7ec4ff9d84f44eb48ba Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 7 Oct 2015 17:42:12 +0200 Subject: [PATCH 082/211] Fixed ObjectiveC cmake language to use the C compiler by default --- .../CMakeDetermineObjectiveCCompiler.cmake | 44 +------------------ .../Modules/CMakeTestObjectiveCCompiler.cmake | 2 + .cmake/Modules/Languages.cmake | 24 +++++----- CMakeLists.txt | 1 - 4 files changed, 17 insertions(+), 54 deletions(-) diff --git a/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake b/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake index 613cd38f..a7a42d17 100644 --- a/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake +++ b/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake @@ -2,48 +2,8 @@ # Redistribution and use of this file is allowed according to the terms of the MIT license. # For details see the LICENSE file distributed with Criterion. -include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake) - -if("${CMAKE_GENERATOR}" MATCHES "Visual Studio") -elseif("${CMAKE_GENERATOR}" MATCHES "Xcode") - set(CMAKE_ObjectiveC_COMPILER_XCODE_TYPE sourcecode.m) - _cmake_find_compiler_path(ObjectiveC) -else() - if(NOT CMAKE_ObjectiveC_COMPILER) - set(CMAKE_ObjectiveC_COMPILER_INIT NOTFOUND) - - if(NOT CMAKE_ObjectiveC_COMPILER_INIT) - set(CMAKE_ObjectiveC_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}gcc clang) - endif() - - _cmake_find_compiler(ObjectiveC) - else() - _cmake_find_compiler_path(ObjectiveC) - endif() - mark_as_advanced(CMAKE_ObjectiveC_COMPILER) - - set(CMAKE_ObjectiveC_COMPILER_ID_TEST_FLAGS_FIRST) - set(CMAKE_ObjectiveC_COMPILER_ID_TEST_FLAGS "-c") - -endif() - -if(NOT CMAKE_ObjectiveC_COMPILER_ID_RUN) - set(CMAKE_ObjectiveC_COMPILER_ID_RUN 1) - - # Try to identify the compiler. - set(CMAKE_ObjectiveC_COMPILER_ID) - set(CMAKE_ObjectiveC_PLATFORM_ID) - file(READ ${CMAKE_ROOT}/Modules/CMakePlatformId.h.in - CMAKE_ObjectiveC_COMPILER_ID_PLATFORM_CONTENT) - - include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake) - - # we use the same compiler id source than C - CMAKE_DETERMINE_COMPILER_ID(ObjectiveC CFLAGS CMakeCCompilerId.c) - -endif() - -include(CMakeFindBinUtils) +set(CMAKE_ObjectiveC_COMPILER_ID ${CMAKE_C_COMPILER_ID}) +set(CMAKE_ObjectiveC_COMPILER ${CMAKE_C_COMPILER}) # configure variables set in this file for fast reload later on configure_file(${CMAKE_CURRENT_LIST_DIR}/CMakeObjectiveCCompiler.cmake.in diff --git a/.cmake/Modules/CMakeTestObjectiveCCompiler.cmake b/.cmake/Modules/CMakeTestObjectiveCCompiler.cmake index e6d5ff10..a32b33f1 100644 --- a/.cmake/Modules/CMakeTestObjectiveCCompiler.cmake +++ b/.cmake/Modules/CMakeTestObjectiveCCompiler.cmake @@ -22,6 +22,8 @@ if(NOT CMAKE_ObjectiveC_COMPILER_WORKS) "#ifdef __cplusplus\n" "# error \"The CMAKE_ObjectiveC_COMPILER is set to an ObjectiveC++ compiler\"\n" "#endif\n" + "@interface Foo\n" + "@end\n" "int main(int argc, char* argv[])\n" "{ (void)argv; return argc-1;}\n") try_compile(CMAKE_ObjectiveC_COMPILER_WORKS ${CMAKE_BINARY_DIR} diff --git a/.cmake/Modules/Languages.cmake b/.cmake/Modules/Languages.cmake index 0ad61d49..615d0670 100644 --- a/.cmake/Modules/Languages.cmake +++ b/.cmake/Modules/Languages.cmake @@ -1,15 +1,17 @@ -if (NOT LANGUAGES) - set(LANGUAGES "") -endif () - -string(REPLACE "," ";" LANGUAGES "${LANGUAGES}") +option(LANG_CXX "Turn on C++ support" ON) +option(LANG_OBJC "Turn on Objective-C support" OFF) -foreach (LANG ${LANGUAGES}) - enable_language(${LANG} OPTIONAL) - if (CMAKE_${LANG}_COMPILER_WORKS) - string(TOUPPER ${LANG} LANG_NAME) - set(${LANG_NAME}_BRIDGE 1) +if (LANG_CXX) + enable_language(CXX) + if (CMAKE_CXX_COMPILER_WORKS) + set(CXX_BRIDGE 1) endif () -endforeach () +endif () +if (LANG_OBJC) + enable_language(ObjectiveC) + if (CMAKE_ObjectiveC_COMPILER_WORKS) + set(OBJC_BRIDGE 1) + endif () +endif () diff --git a/CMakeLists.txt b/CMakeLists.txt index e0313d87..2f0a2970 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,7 +49,6 @@ if (NOT MSVC) endif () endif () - if (MSVC) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") endif () From e85bfcef089b333e89ff6fdee22828a8dfe1b241 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 7 Oct 2015 17:43:17 +0200 Subject: [PATCH 083/211] Added objective C support for CI builds with GNU compilers --- .travis.yml | 2 +- appveyor.yml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 07926e03..42a9a1f4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,7 +34,7 @@ script: -DCOVERALLS=${COVERAGE} -DCMAKE_BUILD_TYPE=${CONFIGURATION} -DCMAKE_INSTALL_PREFIX=criterion-${TRAVIS_TAG} - -DLANGUAGES=CXX + -DLANG_OBJC=ON .. - TERM=dumb cmake --build . --target criterion_tests -- -j4 - ctest -j4 diff --git a/appveyor.yml b/appveyor.yml index 4b1cc8d0..6b91c6b3 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -15,6 +15,7 @@ environment: matrix: - COMPILER: mingw GENERATOR: "MSYS Makefiles" + CMAKE_OPTS: -DLANG_OBJC=ON - COMPILER: msvc GENERATOR: "Visual Studio 14 2015" CFLAGS: /MP @@ -43,7 +44,7 @@ install: -DCTESTS=ON -DCMAKE_INSTALL_PREFIX="criterion-%RELEASE_NAME%" -DCMAKE_BUILD_TYPE="%CONFIGURATION%" - -DLANGUAGES=CXX + %CMAKE_OPTS% -G "%GENERATOR%" .. From baf93fb2f2f7bf431d068568ffda81e927b32b75 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 7 Oct 2015 17:57:53 +0200 Subject: [PATCH 084/211] Added CMAKE_PLATFORM_INFO_DIR definition for CMake <2.8.10 backward compatibility --- .cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake b/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake index a7a42d17..9a9680a5 100644 --- a/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake +++ b/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake @@ -2,6 +2,11 @@ # Redistribution and use of this file is allowed according to the terms of the MIT license. # For details see the LICENSE file distributed with Criterion. +# CMake <2.8.10 backward compat +if(NOT CMAKE_PLATFORM_INFO_DIR) + set(CMAKE_PLATFORM_INFO_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}) +endif(NOT CMAKE_PLATFORM_INFO_DIR) + set(CMAKE_ObjectiveC_COMPILER_ID ${CMAKE_C_COMPILER_ID}) set(CMAKE_ObjectiveC_COMPILER ${CMAKE_C_COMPILER}) From 1f0743a8f542f82eab3a6157b3de139b5f0c3278 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 7 Oct 2015 18:10:31 +0200 Subject: [PATCH 085/211] Disabled Objective C support on windows-mingw and installed gobjc & gnustep on travis --- .travis.yml | 2 ++ appveyor.yml | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 42a9a1f4..0e5eae8c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,6 +15,8 @@ addons: packages: - gcc-4.9 - g++-4.9 + - gobjc-4.9 + - gnustep-base env: global: GCOV: gcov-4.9 diff --git a/appveyor.yml b/appveyor.yml index 6b91c6b3..88ab0e95 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -15,7 +15,6 @@ environment: matrix: - COMPILER: mingw GENERATOR: "MSYS Makefiles" - CMAKE_OPTS: -DLANG_OBJC=ON - COMPILER: msvc GENERATOR: "Visual Studio 14 2015" CFLAGS: /MP From 4be3a015e5aaaff5e86eb31de03252fd307fe3a6 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 8 Oct 2015 13:54:21 +0200 Subject: [PATCH 086/211] Installed gnustep-devel rather than gnustep-base on travis CI --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 0e5eae8c..bf515dda 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ addons: - gcc-4.9 - g++-4.9 - gobjc-4.9 - - gnustep-base + - gnustep-devel env: global: GCOV: gcov-4.9 From 6f1a4721147efe78160544b710969b9582df5253 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 10 Oct 2015 03:12:32 +0200 Subject: [PATCH 087/211] Added GNUStep include path to cmake include directories --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f0a2970..c552e1c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,10 @@ endif () add_subdirectory(dependencies/libcsptr/ EXCLUDE_FROM_ALL) add_subdirectory(dependencies/dyncall/ EXCLUDE_FROM_ALL) -include_directories(SYSTEM /usr/local/include) +include_directories(SYSTEM + /usr/local/include + /usr/include/GNUStep +) include_directories( dependencies/libcsptr/include/ From 7f8c2052ac6707810f6bce78b21ec0fade853945 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 11 Oct 2015 05:18:28 +0200 Subject: [PATCH 088/211] Fixed typo in GNUStep include path --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c552e1c3..8eb4d5ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ add_subdirectory(dependencies/dyncall/ EXCLUDE_FROM_ALL) include_directories(SYSTEM /usr/local/include - /usr/include/GNUStep + /usr/include/GNUstep ) include_directories( From 400e98912595fc6919d96c0a408c24b343ee16be Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 12 Oct 2015 18:01:23 +0200 Subject: [PATCH 089/211] Fixed native exceptions gnustep compilation error --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8eb4d5ec..b95a7843 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -161,6 +161,8 @@ endif () if (CMAKE_ObjectiveC_COMPILER_WORKS) set(CMAKE_ObjectiveC_FLAGS "${CMAKE_ObjectiveC_FLAGS} ${CMAKE_C_FLAGS} -fobjc-exceptions") + add_definitions(-D_NATIVE_OBJC_EXCEPTIONS) + if (NOT WIN32) set(CMAKE_ObjectiveC_FLAGS "${CMAKE_ObjectiveC_FLAGS} -fPIC") endif () From a45b04df4ab9732af89bde028f9af9d198d00402 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 10 Oct 2015 12:32:14 +0100 Subject: [PATCH 090/211] Added klib dependency --- .gitmodules | 3 +++ dependencies/klib | 1 + 2 files changed, 4 insertions(+) create mode 160000 dependencies/klib diff --git a/.gitmodules b/.gitmodules index 7c24be15..7ff4b273 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "dependencies/wingetopt"] path = dependencies/wingetopt url = https://github.com/alex85k/wingetopt.git +[submodule "dependencies/klib"] + path = dependencies/klib + url = https://github.com/attractivechaos/klib.git diff --git a/dependencies/klib b/dependencies/klib new file mode 160000 index 00000000..cdb7e923 --- /dev/null +++ b/dependencies/klib @@ -0,0 +1 @@ +Subproject commit cdb7e9236dc47abf8da7ebd702cc6f7f21f0c502 From 1928e161f784b8ff5a9055defb6c95890b5dce93 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 11 Oct 2015 13:21:23 +0100 Subject: [PATCH 091/211] Added klib cmake dependency --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f3b6e5df..e5baa7b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,7 @@ include_directories( dependencies/libcsptr/include/ dependencies/dyncall/dyncall/ dependencies/valgrind/include/ + dependencies/klib/ ) if (MSVC) @@ -127,6 +128,7 @@ set(SOURCE_FILES src/io/asprintf.c src/io/file.c src/log/logging.c + src/log/output.c src/log/tap.c src/log/normal.c src/log/xml.c From 36543fb956fa882d73274e61a8054479a3675aed Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 12 Oct 2015 10:34:01 +0100 Subject: [PATCH 092/211] Added basic reporter/output registration --- src/log/output.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/log/output.c diff --git a/src/log/output.c b/src/log/output.c new file mode 100644 index 00000000..3b9918d4 --- /dev/null +++ b/src/log/output.c @@ -0,0 +1,36 @@ +#include <stdio.h> +#include <string.h> +#include <khash.h> +#include "criterion/stats.h" + +typedef void criterion_reporter(FILE *stream, struct criterion_global_stats *); + +KHASH_MAP_INIT_STR(ht_str, criterion_reporter*) +KHASH_MAP_INIT_STR(ht_path, const char *) + +static khash_t(ht_str) *reporters; +static khash_t(ht_path) *outputs; + +void criterion_init_output(void) { + reporters = kh_init(ht_str); + outputs = kh_init(ht_path); +} + +int criterion_register_output_provider(const char *name, criterion_reporter *reporter) { + int absent; + khint_t k = kh_put(ht_str, reporters, name, &absent); + kh_value(reporters, k) = reporter; + return absent; +} + +int criterion_add_output(const char *provider, const char *path) { + int absent; + khint_t k = kh_put(ht_path, outputs, provider, &absent); + kh_value(outputs, k) = path; + return absent; +} + +void criterion_free_output(void) { + kh_destroy(ht_str, reporters); + kh_destroy(ht_path, outputs); +} From 27991e7f661abfb26ffa6e663f0f645e1efe2cd2 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 20 Oct 2015 14:10:12 +0100 Subject: [PATCH 093/211] Exported API for output registration --- include/criterion/output.h | 36 ++++++++++++++++++++++++++++++++++++ src/log/output.c | 4 +--- 2 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 include/criterion/output.h diff --git a/include/criterion/output.h b/include/criterion/output.h new file mode 100644 index 00000000..baeeaba2 --- /dev/null +++ b/include/criterion/output.h @@ -0,0 +1,36 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef CRITERION_OUTPUT_H_ +# define CRITERION_OUTPUT_H_ + +# include "stats.h" + +typedef void criterion_reporter(FILE *stream, struct criterion_global_stats *); + +void criterion_init_output(void); +int criterion_register_output_provider(const char *name, criterion_reporter *reporter); +int criterion_add_output(const char *provider, const char *path); +void criterion_free_output(void); + +#endif /* !CRITERION_OUTPUT_H_ */ diff --git a/src/log/output.c b/src/log/output.c index 3b9918d4..f23aa1d3 100644 --- a/src/log/output.c +++ b/src/log/output.c @@ -1,9 +1,7 @@ #include <stdio.h> #include <string.h> #include <khash.h> -#include "criterion/stats.h" - -typedef void criterion_reporter(FILE *stream, struct criterion_global_stats *); +#include "criterion/output.h" KHASH_MAP_INIT_STR(ht_str, criterion_reporter*) KHASH_MAP_INIT_STR(ht_path, const char *) From dcfbc13773c0066e71609914fe9445017e15db4c Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 21 Oct 2015 12:41:23 +0100 Subject: [PATCH 094/211] Removed TAP & XML reporters --- include/criterion/logging.h | 4 ---- src/entry/main.c | 9 --------- 2 files changed, 13 deletions(-) diff --git a/include/criterion/logging.h b/include/criterion/logging.h index 450023be..76fc6eae 100644 --- a/include/criterion/logging.h +++ b/include/criterion/logging.h @@ -120,13 +120,9 @@ struct criterion_output_provider { }; extern struct criterion_output_provider normal_logging; -extern struct criterion_output_provider tap_logging; -extern struct criterion_output_provider xml_logging; CR_END_C_API #define CR_NORMAL_LOGGING (&normal_logging) -#define CR_TAP_LOGGING (&tap_logging) -#define CR_XML_LOGGING (&xml_logging) #endif /* !CRITERION_LOGGING_H_ */ diff --git a/src/entry/main.c b/src/entry/main.c index 007b3201..f711c8b0 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -187,9 +187,6 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { opt->pattern = env_pattern; #endif - bool use_tap = !strcmp("1", DEF(getenv("CRITERION_ENABLE_TAP"), "0")); - bool use_xml = !strcmp("1", DEF(getenv("CRITERION_ENABLE_XML"), "0")); - opt->measure_time = !!strcmp("1", DEF(getenv("CRITERION_DISABLE_TIME_MEASUREMENTS"), "0")); bool do_list_tests = false; @@ -207,8 +204,6 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { #ifdef HAVE_PCRE case 'p': criterion_options.pattern = optarg; break; #endif - case 't': use_tap = true; break; - case 'x': use_xml = true; break; case 'l': do_list_tests = true; break; case 'v': do_print_version = true; break; case 'h': do_print_usage = true; break; @@ -216,10 +211,6 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { default : do_print_usage = handle_unknown_arg; break; } } - if (use_tap) - criterion_options.output_provider = CR_TAP_LOGGING; - else if (use_xml) - criterion_options.output_provider = CR_XML_LOGGING; if (do_print_usage) return print_usage(argv[0]); if (do_print_version) From da66a5704ed884ee3a6e1b498a8a08d2cea9e9b3 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 22 Oct 2015 18:13:29 +0100 Subject: [PATCH 095/211] Integrated new report system into core --- src/core/runner.c | 5 +++++ src/entry/main.c | 1 + src/log/output.c | 50 ++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/src/core/runner.c b/src/core/runner.c index bbe870a3..be6ff1e1 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -37,6 +37,7 @@ #include "wrappers/wrap.h" #include "string/i18n.h" #include "io/event.h" +#include "log/output.h" #include "runner_coroutine.h" #include "stats.h" #include "runner.h" @@ -347,6 +348,8 @@ struct criterion_test_set *criterion_initialize(void) { if (resume_child()) // (windows only) resume from the fork exit(0); + criterion_init_output(); + return criterion_init(); } @@ -451,6 +454,8 @@ static int criterion_run_all_tests_impl(struct criterion_test_set *set) { report(POST_ALL, stats); log(post_all, stats); + process_all_output(stats); + cleanup: sfree(g_worker_pipe); sfree(stats); diff --git a/src/entry/main.c b/src/entry/main.c index f711c8b0..eaad0748 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -30,6 +30,7 @@ #include "criterion/options.h" #include "criterion/ordered-set.h" #include "core/runner.h" +#include "log/output.h" #include "config.h" #include "common.h" diff --git a/src/log/output.c b/src/log/output.c index f23aa1d3..b7893ff5 100644 --- a/src/log/output.c +++ b/src/log/output.c @@ -1,10 +1,13 @@ #include <stdio.h> #include <string.h> #include <khash.h> +#include <kvec.h> #include "criterion/output.h" +typedef kvec_t(const char *) str_vec; + KHASH_MAP_INIT_STR(ht_str, criterion_reporter*) -KHASH_MAP_INIT_STR(ht_path, const char *) +KHASH_MAP_INIT_STR(ht_path, str_vec*) static khash_t(ht_str) *reporters; static khash_t(ht_path) *outputs; @@ -22,13 +25,50 @@ int criterion_register_output_provider(const char *name, criterion_reporter *rep } int criterion_add_output(const char *provider, const char *path) { - int absent; - khint_t k = kh_put(ht_path, outputs, provider, &absent); - kh_value(outputs, k) = path; - return absent; + khint_t k = kh_get(ht_path, outputs, provider); + + if (k == kh_end(outputs)) { + int absent; + k = kh_put(ht_path, outputs, provider, &absent); + if (absent == -1) + return -1; + + str_vec *vec = malloc(sizeof (str_vec)); + kv_init(*vec); + kh_value(outputs, k) = vec; + } + str_vec *vec = kh_value(outputs, k); + + kv_push(const char *, *vec, path); + return 1; } void criterion_free_output(void) { kh_destroy(ht_str, reporters); kh_destroy(ht_path, outputs); } + +void process_all_output(struct criterion_global_stats *stats) { + for (khint_t k = kh_begin(reporters); k != kh_end(reporters); ++k) { + if (!kh_exist(reporters, k)) + continue; + + criterion_reporter *report = kh_value(reporters, k); + khint_t ko = kh_get(ht_path, outputs, kh_key(reporters, k)); + if (ko == kh_end(outputs)) + continue; + + str_vec *vec = kh_value(outputs, ko); + for (size_t i = 0; i < kv_size(*vec); ++i) { + const char *path = kv_A(*vec, i); + + FILE *f; + if (path[0] == '-' && !path[1]) + f = stderr; + else + f = fopen(path, "w"); + + report(f, stats); + } + } +} From 3b0264c4c8253d25b93a3750b048f288dd36eb4d Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 23 Oct 2015 10:54:09 +0100 Subject: [PATCH 096/211] Added missing output header --- src/log/output.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/log/output.h diff --git a/src/log/output.h b/src/log/output.h new file mode 100644 index 00000000..0c734146 --- /dev/null +++ b/src/log/output.h @@ -0,0 +1,31 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef OUTPUT_H_ +# define OUTPUT_H_ + +# include "criterion/output.h" + +void process_all_output(struct criterion_global_stats *stats); + +#endif /* !OUTPUT_H_ */ From 5d8a32bd83a222c9dfba24ece6e91df4d87a6103 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 24 Oct 2015 21:43:54 +0100 Subject: [PATCH 097/211] Added TAP format into the new report system --- src/core/runner.c | 1 + src/entry/main.c | 3 ++- src/log/output.h | 2 ++ src/log/tap.c | 49 ++++++++++++++++++++++------------------------- 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/core/runner.c b/src/core/runner.c index be6ff1e1..011050ff 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -349,6 +349,7 @@ struct criterion_test_set *criterion_initialize(void) { exit(0); criterion_init_output(); + criterion_register_output_provider("tap", tap_report); return criterion_init(); } diff --git a/src/entry/main.c b/src/entry/main.c index eaad0748..34ca2aa5 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -132,7 +132,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { static struct option opts[] = { {"verbose", optional_argument, 0, 'b'}, {"version", no_argument, 0, 'v'}, - {"tap", no_argument, 0, 't'}, + {"tap", optional_argument, 0, 't'}, {"xml", no_argument, 0, 'x'}, {"help", no_argument, 0, 'h'}, {"list", no_argument, 0, 'l'}, @@ -205,6 +205,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { #ifdef HAVE_PCRE case 'p': criterion_options.pattern = optarg; break; #endif + case 't': criterion_add_output("tap", DEF(optarg, "-")); break; case 'l': do_list_tests = true; break; case 'v': do_print_version = true; break; case 'h': do_print_usage = true; break; diff --git a/src/log/output.h b/src/log/output.h index 0c734146..bd3f1250 100644 --- a/src/log/output.h +++ b/src/log/output.h @@ -28,4 +28,6 @@ void process_all_output(struct criterion_global_stats *stats); +void tap_report(FILE *f, struct criterion_global_stats *stats); + #endif /* !OUTPUT_H_ */ diff --git a/src/log/tap.c b/src/log/tap.c index c960951e..779707df 100644 --- a/src/log/tap.c +++ b/src/log/tap.c @@ -35,15 +35,15 @@ #include "config.h" #include "common.h" -static void print_prelude(struct criterion_global_stats *stats) { - criterion_important("TAP version 13\n1.." +static void print_prelude(FILE *f, struct criterion_global_stats *stats) { + fprintf(f, "TAP version 13\n1.." CR_SIZE_T_FORMAT "\n", stats->nb_tests); - criterion_important("# Criterion v%s\n", VERSION); + fprintf(f, "# Criterion v%s\n", VERSION); } -static void print_pre_suite(struct criterion_suite_stats *stats) { - criterion_important("\n# Running " +static void print_pre_suite(FILE *f, struct criterion_suite_stats *stats) { + fprintf(f, "\n# Running " CR_SIZE_T_FORMAT " tests from %s\n", stats->nb_tests, @@ -54,10 +54,10 @@ static INLINE bool is_disabled(struct criterion_test *t, struct criterion_suite return t->data->disabled || (s->data && s->data->disabled); } -static void print_test_normal(struct criterion_test_stats *stats) { +static void print_test_normal(FILE *f, struct criterion_test_stats *stats) { const char *format = can_measure_time() ? "%s - %s::%s %s (%3.2fs)\n" : "%s - %s::%s %s\n"; - criterion_important(format, + fprintf(f, format, stats->failed ? "not ok" : "ok", stats->test->category, stats->test->name, @@ -69,64 +69,61 @@ static void print_test_normal(struct criterion_test_stats *stats) { char *saveptr = NULL; char *line = strtok_r(dup, "\n", &saveptr); bool sf = criterion_options.short_filename; - criterion_important(" %s:%u: Assertion failed: %s\n", + fprintf(f, " %s:%u: Assertion failed: %s\n", sf ? basename_compat(asrt->file) : asrt->file, asrt->line, line); while ((line = strtok_r(NULL, "\n", &saveptr))) - criterion_important(" %s\n", line); + fprintf(f, " %s\n", line); free(dup); } } } -static void print_test_crashed(struct criterion_test_stats *stats) { +static void print_test_crashed(FILE *f, struct criterion_test_stats *stats) { bool sf = criterion_options.short_filename; - criterion_important("not ok - %s::%s unexpected signal after %s:%u\n", + fprintf(f, "not ok - %s::%s unexpected signal after %s:%u\n", stats->test->category, stats->test->name, sf ? basename_compat(stats->file) : stats->file, stats->progress); } -static void print_test_timeout(struct criterion_test_stats *stats) { - criterion_important("not ok - %s::%s timed out (%3.2fs)\n", +static void print_test_timeout(FILE *f, struct criterion_test_stats *stats) { + fprintf(f, "not ok - %s::%s timed out (%3.2fs)\n", stats->test->category, stats->test->name, stats->elapsed_time); } -static void print_test(struct criterion_test_stats *ts, +static void print_test(FILE *f, + struct criterion_test_stats *ts, struct criterion_suite_stats *ss) { if (is_disabled(ts->test, ss->suite)) { - criterion_important("ok - %s::%s %s # SKIP %s is disabled\n", + fprintf(f, "ok - %s::%s %s # SKIP %s is disabled\n", ts->test->category, ts->test->name, DEF(ts->test->data->description, ""), ts->test->data->disabled ? "test" : "suite"); } else if (ts->crashed) { - print_test_crashed(ts); + print_test_crashed(f, ts); } else if (ts->timed_out) { - print_test_timeout(ts); + print_test_timeout(f, ts); } else { - print_test_normal(ts); + print_test_normal(f, ts); } } -void tap_log_post_all(struct criterion_global_stats *stats) { - print_prelude(stats); +void tap_report(FILE *f, struct criterion_global_stats *stats) { + print_prelude(f, stats); for (struct criterion_suite_stats *ss = stats->suites; ss; ss = ss->next) { - print_pre_suite(ss); + print_pre_suite(f, ss); for (struct criterion_test_stats *ts = ss->tests; ts; ts = ts->next) { - print_test(ts, ss); + print_test(f, ts, ss); } } } - -struct criterion_output_provider tap_logging = { - .log_post_all = tap_log_post_all, -}; From d2d36052d7f8d44e5609a869a18aca14b0faf886 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 25 Oct 2015 10:02:39 +0100 Subject: [PATCH 098/211] Added XML format into the new report system --- src/core/runner.c | 1 + src/entry/main.c | 3 ++- src/log/output.h | 1 + src/log/xml.c | 37 +++++++++++++++++-------------------- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/core/runner.c b/src/core/runner.c index 011050ff..34ac6ce2 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -350,6 +350,7 @@ struct criterion_test_set *criterion_initialize(void) { criterion_init_output(); criterion_register_output_provider("tap", tap_report); + criterion_register_output_provider("xml", xml_report); return criterion_init(); } diff --git a/src/entry/main.c b/src/entry/main.c index 34ca2aa5..9ee14b9e 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -133,7 +133,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { {"verbose", optional_argument, 0, 'b'}, {"version", no_argument, 0, 'v'}, {"tap", optional_argument, 0, 't'}, - {"xml", no_argument, 0, 'x'}, + {"xml", optional_argument, 0, 'x'}, {"help", no_argument, 0, 'h'}, {"list", no_argument, 0, 'l'}, {"ascii", no_argument, 0, 'k'}, @@ -206,6 +206,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { case 'p': criterion_options.pattern = optarg; break; #endif case 't': criterion_add_output("tap", DEF(optarg, "-")); break; + case 'x': criterion_add_output("xml", DEF(optarg, "-")); break; case 'l': do_list_tests = true; break; case 'v': do_print_version = true; break; case 'h': do_print_usage = true; break; diff --git a/src/log/output.h b/src/log/output.h index bd3f1250..e3322897 100644 --- a/src/log/output.h +++ b/src/log/output.h @@ -29,5 +29,6 @@ void process_all_output(struct criterion_global_stats *stats); void tap_report(FILE *f, struct criterion_global_stats *stats); +void xml_report(FILE *f, struct criterion_global_stats *stats); #endif /* !OUTPUT_H_ */ diff --git a/src/log/xml.c b/src/log/xml.c index fd7c9d6f..3bce465f 100644 --- a/src/log/xml.c +++ b/src/log/xml.c @@ -112,24 +112,25 @@ const char *get_status_string(struct criterion_test_stats *ts, return status; } -static void print_test(struct criterion_test_stats *ts, +static void print_test(FILE *f, + struct criterion_test_stats *ts, struct criterion_suite_stats *ss) { - criterion_important(XML_TEST_TEMPLATE_BEGIN, + fprintf(f, XML_TEST_TEMPLATE_BEGIN, ts->test->name, (size_t) (ts->passed_asserts + ts->failed_asserts), get_status_string(ts, ss) ); if (is_disabled(ts->test, ss->suite)) { - criterion_important(XML_TEST_SKIPPED); + fprintf(f, XML_TEST_SKIPPED); } else if (ts->crashed) { - criterion_important(XML_CRASH_MSG_ENTRY); + fprintf(f, XML_CRASH_MSG_ENTRY); } else if (ts->timed_out) { - criterion_important(XML_TIMEOUT_MSG_ENTRY); + fprintf(f, XML_TIMEOUT_MSG_ENTRY); } else { if (ts->failed) { - criterion_important(XML_TEST_FAILED_TEMPLATE_BEGIN, ts->failed_asserts); + fprintf(f, XML_TEST_FAILED_TEMPLATE_BEGIN, ts->failed_asserts); for (struct criterion_assert_stats *asrt = ts->asserts; asrt; asrt = asrt->next) { if (!asrt->passed) { bool sf = criterion_options.short_filename; @@ -137,26 +138,26 @@ static void print_test(struct criterion_test_stats *ts, char *saveptr = NULL; char *line = strtok_r(dup, "\n", &saveptr); - criterion_important(XML_FAILURE_MSG_ENTRY, + fprintf(f, XML_FAILURE_MSG_ENTRY, sf ? basename_compat(asrt->file) : asrt->file, asrt->line, line ); while ((line = strtok_r(NULL, "\n", &saveptr))) - criterion_important(" %s" LF, line); + fprintf(f, " %s" LF, line); free(dup); } } - criterion_important(XML_TEST_FAILED_TEMPLATE_END); + fprintf(f, XML_TEST_FAILED_TEMPLATE_END); } } - criterion_important(XML_TEST_TEMPLATE_END); + fprintf(f, XML_TEST_TEMPLATE_END); } -void xml_log_post_all(struct criterion_global_stats *stats) { - criterion_important(XML_BASE_TEMPLATE_BEGIN, +void xml_report(FILE *f, struct criterion_global_stats *stats) { + fprintf(f, XML_BASE_TEMPLATE_BEGIN, stats->nb_tests, stats->tests_failed, stats->tests_crashed, @@ -165,7 +166,7 @@ void xml_log_post_all(struct criterion_global_stats *stats) { for (struct criterion_suite_stats *ss = stats->suites; ss; ss = ss->next) { - criterion_important(XML_TESTSUITE_TEMPLATE_BEGIN, + fprintf(f, XML_TESTSUITE_TEMPLATE_BEGIN, ss->suite->name, ss->nb_tests, ss->tests_failed, @@ -175,15 +176,11 @@ void xml_log_post_all(struct criterion_global_stats *stats) { ); for (struct criterion_test_stats *ts = ss->tests; ts; ts = ts->next) { - print_test(ts, ss); + print_test(f, ts, ss); } - criterion_important(XML_TESTSUITE_TEMPLATE_END); + fprintf(f, XML_TESTSUITE_TEMPLATE_END); } - criterion_important(XML_BASE_TEMPLATE_END); + fprintf(f, XML_BASE_TEMPLATE_END); } - -struct criterion_output_provider xml_logging = { - .log_post_all = xml_log_post_all, -}; From 13c8fa79a8448107bc106f275e25edebe2847fa3 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 26 Oct 2015 10:29:00 +0100 Subject: [PATCH 099/211] Updated CLI help message for --tap and --xml --- src/entry/main.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/entry/main.c b/src/entry/main.c index 9ee14b9e..c27506fa 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -63,8 +63,10 @@ " -S or --short-filename: only display the base " \ "name of the source file on a failure\n" \ PATTERN_USAGE \ - " --tap: enables TAP formatting\n" \ - " --xml: enables XML formatting\n" \ + " --tap[=FILE]: writes TAP report in FILE " \ + "(no file or \"-\" means stderr)\n" \ + " --xml[=FILE]: writes XML report in FILE " \ + "(no file or \"-\" means stderr)\n" \ " --always-succeed: always exit with 0\n" \ " --no-early-exit: do not exit the test worker " \ "prematurely after the test\n" \ From 770c312f708e1e47424253d46c528b1137c7812f Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 27 Oct 2015 13:56:47 +0100 Subject: [PATCH 100/211] Added --quiet CLI switch --- include/criterion/logging.h | 2 ++ src/entry/main.c | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/include/criterion/logging.h b/include/criterion/logging.h index 76fc6eae..2e07f43f 100644 --- a/include/criterion/logging.h +++ b/include/criterion/logging.h @@ -38,6 +38,8 @@ using std::va_list; enum criterion_logging_level { CRITERION_INFO = 1, CRITERION_IMPORTANT, + + CRITERION_LOG_LEVEL_QUIET = 1 << 30, }; enum criterion_logging_prefix { diff --git a/src/entry/main.c b/src/entry/main.c index c27506fa..e6c9722e 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -53,6 +53,7 @@ "usage: %s OPTIONS\n" \ "options: \n" \ " -h or --help: prints this message\n" \ + " -q or --quiet: disables all logging\n" \ " -v or --version: prints the version of criterion " \ "these tests have been linked against\n" \ " -l or --list: prints all the tests in a list\n" \ @@ -133,6 +134,7 @@ int atou(const char *str) { int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { static struct option opts[] = { {"verbose", optional_argument, 0, 'b'}, + {"quiet", no_argument, 0, 'q'}, {"version", no_argument, 0, 'v'}, {"tap", optional_argument, 0, 't'}, {"xml", optional_argument, 0, 'x'}, @@ -195,7 +197,8 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { bool do_list_tests = false; bool do_print_version = false; bool do_print_usage = false; - for (int c; (c = getopt_long(argc, argv, "hvlfj:S", opts, NULL)) != -1;) { + bool quiet = false; + for (int c; (c = getopt_long(argc, argv, "hvlfj:Sq", opts, NULL)) != -1;) { switch (c) { case 'b': criterion_options.logging_threshold = atou(DEF(optarg, "1")); break; case 'y': criterion_options.always_succeed = true; break; @@ -207,8 +210,9 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { #ifdef HAVE_PCRE case 'p': criterion_options.pattern = optarg; break; #endif - case 't': criterion_add_output("tap", DEF(optarg, "-")); break; - case 'x': criterion_add_output("xml", DEF(optarg, "-")); break; + case 'q': quiet = true; break; + case 't': quiet = true; criterion_add_output("tap", DEF(optarg, "-")); break; + case 'x': quiet = true; criterion_add_output("xml", DEF(optarg, "-")); break; case 'l': do_list_tests = true; break; case 'v': do_print_version = true; break; case 'h': do_print_usage = true; break; @@ -216,6 +220,9 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { default : do_print_usage = handle_unknown_arg; break; } } + if (quiet) + criterion_options.logging_threshold = CRITERION_LOG_LEVEL_QUIET; + if (do_print_usage) return print_usage(argv[0]); if (do_print_version) From 446dc0f380fe4bc682b60fde0970857106ddf4dd Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 28 Oct 2015 20:45:55 +0100 Subject: [PATCH 101/211] Properly free output file hash map --- src/core/runner.c | 2 ++ src/log/output.c | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/src/core/runner.c b/src/core/runner.c index 34ac6ce2..1aae9359 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -361,6 +361,8 @@ void criterion_finalize(struct criterion_test_set *set) { #ifndef ENABLE_VALGRIND_ERRORS VALGRIND_ENABLE_ERROR_REPORTING; #endif + + criterion_free_output(); } static void run_tests_async(struct criterion_test_set *set, diff --git a/src/log/output.c b/src/log/output.c index b7893ff5..b5ce1fb2 100644 --- a/src/log/output.c +++ b/src/log/output.c @@ -44,6 +44,13 @@ int criterion_add_output(const char *provider, const char *path) { } void criterion_free_output(void) { + for (khint_t k = kh_begin(outputs); k != kh_end(outputs); ++k) { + if (!kh_exist(outputs, k)) + continue; + str_vec *vec = kh_value(outputs, k); + kv_destroy(*vec); + free(vec); + } kh_destroy(ht_str, reporters); kh_destroy(ht_path, outputs); } From cda6b93212766c3a54a132c5431322b9e27e326e Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 29 Oct 2015 02:12:34 +0100 Subject: [PATCH 102/211] Updated line counts for po files --- po/fr.po | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/po/fr.po b/po/fr.po index e6c75a48..6e8fe381 100644 --- a/po/fr.po +++ b/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: criterion 2.0.0\n" "Report-Msgid-Bugs-To: franklinmathieu+criterion@gmail.com\n" -"POT-Creation-Date: 2015-10-05 16:20+0200\n" +"POT-Creation-Date: 2015-11-11 00:24+0100\n" "PO-Revision-Date: 2015-04-03 17:58+0200\n" "Last-Translator: <franklinmathieu@gmail.com>\n" "Language-Team: French\n" @@ -18,70 +18,70 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/log/normal.c:41 +#: src/log/normal.c:42 #, c-format msgid "Criterion v%s\n" msgstr "Criterion v%s\n" -#: src/log/normal.c:42 +#: src/log/normal.c:43 #, c-format msgid " %s\n" msgstr " %s\n" -#: src/log/normal.c:45 src/log/normal.c:47 +#: src/log/normal.c:46 src/log/normal.c:48 #, c-format msgid "%1$s::%2$s\n" msgstr "%1$s::%2$s\n" -#: src/log/normal.c:46 +#: src/log/normal.c:47 #, fuzzy, c-format msgid "%1$s::%2$s: (%3$3.2fs)\n" msgstr "%1$s::%2$s: (%3$3.2fs)\n" -#: src/log/normal.c:48 +#: src/log/normal.c:49 #, c-format msgid "%1$s::%2$s: Test is disabled\n" msgstr "%1$s::%2$s: Le test est désactivé\n" -#: src/log/normal.c:49 +#: src/log/normal.c:50 #, c-format msgid "%1$s::%2$s: Suite is disabled\n" msgstr "%1$s::%2$s: La suite est désactivée\n" -#: src/log/normal.c:50 +#: src/log/normal.c:51 #, c-format msgid "%1$s%2$s%3$s:%4$s%5$d%6$s: Assertion failed: %7$s\n" msgstr "%1$s%2$s%3$s:%4$s%5$d%6$s: Échec d'assertion: %7$s\n" -#: src/log/normal.c:51 +#: src/log/normal.c:52 #, fuzzy, c-format msgid " Theory %1$s::%2$s failed with the following parameters: (%3$s)\n" msgstr "" " La théorie %1$s::%2$s a échoué avec les paramètres suivants: (%3$s)\n" -#: src/log/normal.c:52 +#: src/log/normal.c:53 #, fuzzy, c-format msgid "%1$s::%2$s: Timed out. (%3$3.2fs)\n" msgstr "%1$s::%2$s: Délai expiré. (%3$3.2fs)\n" -#: src/log/normal.c:53 +#: src/log/normal.c:54 #, c-format msgid "%1$s%2$s%3$s:%4$s%5$u%6$s: Unexpected signal caught below this line!\n" msgstr "" "%1$s%2$s%3$s:%4$s%5$u%6$s: Un signal inattendu a été reçu après cette " "ligne!\n" -#: src/log/normal.c:54 +#: src/log/normal.c:55 #, c-format msgid "%1$s::%2$s: CRASH!\n" msgstr "%1$s::%2$s: PLANTAGE!\n" -#: src/log/normal.c:55 +#: src/log/normal.c:56 #, fuzzy, c-format msgid "%1$s::%2$s: %3$s\n" msgstr "%1$s::%2$s: (%3$3.2fs)\n" -#: src/log/normal.c:56 +#: src/log/normal.c:57 #, fuzzy, c-format msgid "" "%1$sWarning! The test `%2$s::%3$s` crashed during its setup or teardown." @@ -90,7 +90,7 @@ msgstr "" "%1$sAttention! Le test `%2$s::%3$s` a planté pendant son initialisation ou " "sa finalisation.%4$s\n" -#: src/log/normal.c:57 +#: src/log/normal.c:58 #, fuzzy, c-format msgid "" "%1$sWarning! The test `%2$s::%3$s` exited during its setup or teardown.%4$s\n" @@ -98,14 +98,14 @@ msgstr "" "%1$sAttention! Le test `%2$s::%3$s` a quitté pendant son initialisation ou " "sa finalisation.%4$s\n" -#: src/log/normal.c:58 +#: src/log/normal.c:59 #, c-format msgid "Running %1$s%2$lu%3$s test from %4$s%5$s%6$s:\n" msgid_plural "Running %1$s%2$lu%3$s tests from %4$s%5$s%6$s:\n" msgstr[0] "Lancement de %1$s%2$lu%3$s test dans %4$s%5$s%6$s:\n" msgstr[1] "Lancement de %1$s%2$lu%3$s tests dans %4$s%5$s%6$s:\n" -#: src/log/normal.c:60 +#: src/log/normal.c:61 #, c-format msgid "" "%1$sSynthesis: Tested: %2$s%3$lu%4$s | Passing: %5$s%6$lu%7$s | Failing: %8$s" @@ -114,7 +114,7 @@ msgstr "" "%1$sSynthèse: Testés: %2$s%3$lu%4$s | Validés: %5$s%6$lu%7$s | Échoués: %8$s" "%9$lu%10$s | Plantages: %11$s%12$lu%13$s %14$s\n" -#: src/log/normal.c:76 +#: src/log/normal.c:77 #, fuzzy, c-format msgid "%s::%s: %s\n" msgstr "%1$s::%2$s: (%3$3.2fs)\n" From d527d2db802e270f95c64142edbd9990469423d6 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 30 Oct 2015 10:20:55 +0100 Subject: [PATCH 103/211] Fixed missing destructor, causing a memory leak --- src/core/stats.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/core/stats.c b/src/core/stats.c index dd8969b0..f68e9187 100644 --- a/src/core/stats.c +++ b/src/core/stats.c @@ -105,6 +105,11 @@ static void destroy_test_stats(void *ptr, CR_UNUSED void *meta) { } } +static void destroy_assert_stats(void *ptr, CR_UNUSED void *meta) { + s_assert_stats *stats = ptr; + free((void *) stats->message); +} + s_test_stats *test_stats_init(struct criterion_test *t) { s_test_stats *stats = smalloc( .size = sizeof (s_test_stats), @@ -182,7 +187,9 @@ static void push_assert(s_glob_stats *stats, s_assert_stats *data = ptr; - s_assert_stats *dup = smalloc(sizeof (s_assert_stats)); + s_assert_stats *dup = smalloc( + .size = sizeof (s_assert_stats), + .dtor = destroy_assert_stats); memcpy(dup, data, sizeof (s_assert_stats)); dup->message = strdup(data->message); From a3477d689acb338a51a16cfbcabe37930672d13a Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 31 Oct 2015 12:43:55 +0100 Subject: [PATCH 104/211] Added i18n cmake option --- CMakeLists.txt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f3b6e5df..3a934621 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,12 +70,16 @@ endif() # Find dependencies -find_package(Gettext) -find_package(Libintl) -if (GETTEXT_FOUND AND LIBINTL_LIB_FOUND) - include(GettextTranslate) - add_subdirectory(po) - set(ENABLE_NLS 1) +option(I18N "Turn on internationalization" ON) + +if (I18N) + find_package(Gettext) + find_package(Libintl) + if (GETTEXT_FOUND AND LIBINTL_LIB_FOUND) + include(GettextTranslate) + add_subdirectory(po) + set(ENABLE_NLS 1) + endif () endif () include(CheckLibraryExists) From 94eb04d9ff7eb50987c1e2369632312d55393c00 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 1 Nov 2015 10:02:19 +0100 Subject: [PATCH 105/211] Disabled i18n on appveyor builds --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index ae991136..5940648d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -41,6 +41,7 @@ install: cmake -Wno-dev -DCTESTS=ON + -DI18N=OFF -DCMAKE_INSTALL_PREFIX="criterion-%RELEASE_NAME%" -DCMAKE_BUILD_TYPE="%CONFIGURATION%" -G "%GENERATOR%" From c5c5fe86993ae0a3c085530f1fa32060733aa898 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 2 Nov 2015 12:32:40 +0100 Subject: [PATCH 106/211] Updated documentation for the new reporting system --- doc/env.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/env.rst b/doc/env.rst index d3e6aee9..4291f799 100644 --- a/doc/env.rst +++ b/doc/env.rst @@ -8,6 +8,7 @@ Command line arguments ---------------------- * ``-h or --help``: Show a help message with the available switches. +* ``-q or --quiet``: Disables all logging. * ``-v or --version``: Prints the version of criterion that has been linked against. * ``-l or --list``: Print all the tests in a list. @@ -22,8 +23,10 @@ Command line arguments This is useful when tracking memory leaks with ``valgrind --tool=memcheck``. * ``-S or --short-filename``: The filenames are displayed in their short form. * ``--always-succeed``: The process shall exit with a status of ``0``. -* ``--tap``: Enables the TAP (Test Anything Protocol) output format. -* ``--xml``: Enables the JUnit4 XML output format. +* ``--tap[=FILE]``: Writes a TAP (Test Anything Protocol) report to FILE. + No file or ``"-"`` means ``stderr``. +* ``--xml[=FILE]``: Writes JUnit4 XML report to FILE. + No file or ``"-"`` means ``stderr``. * ``--verbose[=level]``: Makes the output verbose. When provided with an integer, sets the verbosity level to that integer. @@ -71,8 +74,6 @@ Environment variables are alternatives to command line switches when set to 1. * ``CRITERION_ALWAYS_SUCCEED``: Same as ``--always-succeed``. * ``CRITERION_NO_EARLY_EXIT``: Same as ``--no-early-exit``. -* ``CRITERION_ENABLE_TAP``: Same as ``--tap``. -* ``CRITERION_ENABLE_XML``: Same as ``--xml``. * ``CRITERION_FAIL_FAST``: Same as ``--fail-fast``. * ``CRITERION_USE_ASCII``: Same as ``--ascii``. * ``CRITERION_JOBS``: Same as ``jobs``. Sets the number of jobs to From 06dcdc32c7ee4a88ee3b02d972b49a42ef769e30 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 3 Nov 2015 10:07:26 +0100 Subject: [PATCH 107/211] Fixed typo in env doc, added missing doc for CRITERION_DISABLE_TIME_MEASUREMENTS --- doc/env.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/env.rst b/doc/env.rst index d3e6aee9..67fcfd5a 100644 --- a/doc/env.rst +++ b/doc/env.rst @@ -75,10 +75,12 @@ Environment variables are alternatives to command line switches when set to 1. * ``CRITERION_ENABLE_XML``: Same as ``--xml``. * ``CRITERION_FAIL_FAST``: Same as ``--fail-fast``. * ``CRITERION_USE_ASCII``: Same as ``--ascii``. -* ``CRITERION_JOBS``: Same as ``jobs``. Sets the number of jobs to +* ``CRITERION_JOBS``: Same as ``--jobs``. Sets the number of jobs to its value. * ``CRITERION_SHORT_FILENAME``: Same as ``--short-filename``. * ``CRITERION_VERBOSITY_LEVEL``: Same as ``--verbose``. Sets the verbosity level to its value. * ``CRITERION_TEST_PATTERN``: Same as ``--pattern``. Sets the test pattern to its value. (\*nix only) +* ``CRITERION_DISABLE_TIME_MEASUREMENTS``: Disables any time measurements on + the tests. From 8659994fa9408014559f17d2fa7f4d7aa5cdb906 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 3 Nov 2015 10:03:05 +0100 Subject: [PATCH 108/211] Added auto-initializing output registration, to allow output provider registration before criterion_initialize() --- include/criterion/output.h | 2 -- src/core/runner.c | 1 - src/log/output.c | 34 +++++++++++++++++++++------------- src/log/output.h | 1 + 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/include/criterion/output.h b/include/criterion/output.h index baeeaba2..a5a0c666 100644 --- a/include/criterion/output.h +++ b/include/criterion/output.h @@ -28,9 +28,7 @@ typedef void criterion_reporter(FILE *stream, struct criterion_global_stats *); -void criterion_init_output(void); int criterion_register_output_provider(const char *name, criterion_reporter *reporter); int criterion_add_output(const char *provider, const char *path); -void criterion_free_output(void); #endif /* !CRITERION_OUTPUT_H_ */ diff --git a/src/core/runner.c b/src/core/runner.c index 1aae9359..7a87b811 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -348,7 +348,6 @@ struct criterion_test_set *criterion_initialize(void) { if (resume_child()) // (windows only) resume from the fork exit(0); - criterion_init_output(); criterion_register_output_provider("tap", tap_report); criterion_register_output_provider("xml", xml_report); diff --git a/src/log/output.c b/src/log/output.c index b5ce1fb2..25831e42 100644 --- a/src/log/output.c +++ b/src/log/output.c @@ -12,12 +12,10 @@ KHASH_MAP_INIT_STR(ht_path, str_vec*) static khash_t(ht_str) *reporters; static khash_t(ht_path) *outputs; -void criterion_init_output(void) { - reporters = kh_init(ht_str); - outputs = kh_init(ht_path); -} - int criterion_register_output_provider(const char *name, criterion_reporter *reporter) { + if (!reporters) + reporters = kh_init(ht_str); + int absent; khint_t k = kh_put(ht_str, reporters, name, &absent); kh_value(reporters, k) = reporter; @@ -25,6 +23,9 @@ int criterion_register_output_provider(const char *name, criterion_reporter *rep } int criterion_add_output(const char *provider, const char *path) { + if (!outputs) + outputs = kh_init(ht_path); + khint_t k = kh_get(ht_path, outputs, provider); if (k == kh_end(outputs)) { @@ -44,18 +45,25 @@ int criterion_add_output(const char *provider, const char *path) { } void criterion_free_output(void) { - for (khint_t k = kh_begin(outputs); k != kh_end(outputs); ++k) { - if (!kh_exist(outputs, k)) - continue; - str_vec *vec = kh_value(outputs, k); - kv_destroy(*vec); - free(vec); + if (reporters) + kh_destroy(ht_str, reporters); + + if (outputs) { + for (khint_t k = kh_begin(outputs); k != kh_end(outputs); ++k) { + if (!kh_exist(outputs, k)) + continue; + str_vec *vec = kh_value(outputs, k); + kv_destroy(*vec); + free(vec); + } + kh_destroy(ht_path, outputs); } - kh_destroy(ht_str, reporters); - kh_destroy(ht_path, outputs); } void process_all_output(struct criterion_global_stats *stats) { + if (!outputs || !reporters) + return; + for (khint_t k = kh_begin(reporters); k != kh_end(reporters); ++k) { if (!kh_exist(reporters, k)) continue; diff --git a/src/log/output.h b/src/log/output.h index e3322897..576ac342 100644 --- a/src/log/output.h +++ b/src/log/output.h @@ -27,6 +27,7 @@ # include "criterion/output.h" void process_all_output(struct criterion_global_stats *stats); +void criterion_free_output(void); void tap_report(FILE *f, struct criterion_global_stats *stats); void xml_report(FILE *f, struct criterion_global_stats *stats); From 554f25608fc467f8f04ca16b32c16380682ebfed Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 4 Nov 2015 20:18:47 +0100 Subject: [PATCH 109/211] Refactored output_provider -> logger, and moved actual output providers to io/ --- CMakeLists.txt | 8 +++++--- doc/internal.rst | 14 +++++++------- include/criterion/logging.h | 4 ++-- include/criterion/options.h | 2 +- src/core/report.h | 2 +- src/core/runner.c | 2 +- src/entry/main.c | 2 +- src/entry/options.c | 2 +- src/{log => io}/output.c | 0 src/{log => io}/output.h | 0 src/{log => io}/tap.c | 2 -- src/{log => io}/xml.c | 0 src/log/normal.c | 2 +- 13 files changed, 20 insertions(+), 20 deletions(-) rename src/{log => io}/output.c (100%) rename src/{log => io}/output.h (100%) rename src/{log => io}/tap.c (98%) rename src/{log => io}/xml.c (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index e5baa7b5..dd568704 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,11 +127,12 @@ set(SOURCE_FILES src/io/event.h src/io/asprintf.c src/io/file.c + src/io/output.c + src/io/output.h + src/io/tap.c + src/io/xml.c src/log/logging.c - src/log/output.c - src/log/tap.c src/log/normal.c - src/log/xml.c src/string/i18n.c src/string/i18n.h src/entry/options.c @@ -168,6 +169,7 @@ set(INTERFACE_FILES include/criterion/alloc.h include/criterion/parameterized.h include/criterion/redirect.h + include/criterion/output.h ) # Generate the configure file diff --git a/doc/internal.rst b/doc/internal.rst index 69b5f0ad..f1296282 100644 --- a/doc/internal.rst +++ b/doc/internal.rst @@ -28,7 +28,7 @@ Field Type Description =================== ================================== ============================================================== logging_threshold enum criterion_logging_level The logging level ------------------- ---------------------------------- -------------------------------------------------------------- -output_provider struct criterion_output_provider * The output provider (see below) +logger struct criterion_logger * The logger (see below) ------------------- ---------------------------------- -------------------------------------------------------------- no_early_exit bool True iff the test worker should exit early ------------------- ---------------------------------- -------------------------------------------------------------- @@ -75,15 +75,15 @@ Example main return result; } -Implementing your own output provider -------------------------------------- +Implementing your own logger +---------------------------- -In case you are not satisfied by the default output provider, you can implement -yours. To do so, simply set the ``output_provider`` option to your custom -output provider. +In case you are not satisfied by the default logger, you can implement +yours. To do so, simply set the ``logger`` option to your custom +logger. Each function contained in the structure is called during one of the standard phase of the criterion runner. -For more insight on how to implement this, see other existing output providers +For more insight on how to implement this, see other existing loggers in ``src/log/``. diff --git a/include/criterion/logging.h b/include/criterion/logging.h index 2e07f43f..3fbc27c3 100644 --- a/include/criterion/logging.h +++ b/include/criterion/logging.h @@ -103,7 +103,7 @@ CR_API void criterion_log(enum criterion_logging_level level, const char *msg, . # define criterion_perror(...) criterion_plog(CRITERION_IMPORTANT, CRITERION_PREFIX_ERR, __VA_ARGS__) -struct criterion_output_provider { +struct criterion_logger { void (*log_pre_all )(struct criterion_test_set *set); void (*log_pre_suite )(struct criterion_suite_set *set); void (*log_pre_init )(struct criterion_test *test); @@ -121,7 +121,7 @@ struct criterion_output_provider { void (*log_post_all )(struct criterion_global_stats *stats); }; -extern struct criterion_output_provider normal_logging; +extern struct criterion_logger normal_logging; CR_END_C_API diff --git a/include/criterion/options.h b/include/criterion/options.h index ee3a9c37..220e32c9 100644 --- a/include/criterion/options.h +++ b/include/criterion/options.h @@ -29,7 +29,7 @@ struct criterion_options { enum criterion_logging_level logging_threshold; - struct criterion_output_provider *output_provider; + struct criterion_logger *logger; bool no_early_exit; bool always_succeed; bool use_ascii; diff --git a/src/core/report.h b/src/core/report.h index dfee5ba1..aa545ea3 100644 --- a/src/core/report.h +++ b/src/core/report.h @@ -46,7 +46,7 @@ DECL_CALL_REPORT_HOOKS(POST_SUITE); DECL_CALL_REPORT_HOOKS(POST_ALL); #define log(Type, ...) \ - log_(criterion_options.output_provider->log_ ## Type, __VA_ARGS__); + log_(criterion_options.logger->log_ ## Type, __VA_ARGS__); #define log_(Log, ...) \ (Log ? Log(__VA_ARGS__) : nothing()); diff --git a/src/core/runner.c b/src/core/runner.c index 7a87b811..6ebae261 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -37,7 +37,7 @@ #include "wrappers/wrap.h" #include "string/i18n.h" #include "io/event.h" -#include "log/output.h" +#include "io/output.h" #include "runner_coroutine.h" #include "stats.h" #include "runner.h" diff --git a/src/entry/main.c b/src/entry/main.c index e6c9722e..6a73b37d 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -30,7 +30,7 @@ #include "criterion/options.h" #include "criterion/ordered-set.h" #include "core/runner.h" -#include "log/output.h" +#include "io/output.h" #include "config.h" #include "common.h" diff --git a/src/entry/options.c b/src/entry/options.c index 20295f92..0569a402 100644 --- a/src/entry/options.c +++ b/src/entry/options.c @@ -25,6 +25,6 @@ struct criterion_options criterion_options = { .logging_threshold = CRITERION_IMPORTANT, - .output_provider = &normal_logging, + .logger = &normal_logging, .measure_time = true, }; diff --git a/src/log/output.c b/src/io/output.c similarity index 100% rename from src/log/output.c rename to src/io/output.c diff --git a/src/log/output.h b/src/io/output.h similarity index 100% rename from src/log/output.h rename to src/io/output.h diff --git a/src/log/tap.c b/src/io/tap.c similarity index 98% rename from src/log/tap.c rename to src/io/tap.c index 779707df..6c7b7977 100644 --- a/src/log/tap.c +++ b/src/io/tap.c @@ -26,9 +26,7 @@ #include <stdlib.h> #include <string.h> #include "criterion/stats.h" -#include "criterion/logging.h" #include "criterion/options.h" -#include "criterion/ordered-set.h" #include "compat/posix.h" #include "compat/strtok.h" #include "compat/time.h" diff --git a/src/log/xml.c b/src/io/xml.c similarity index 100% rename from src/log/xml.c rename to src/io/xml.c diff --git a/src/log/normal.c b/src/log/normal.c index f7319d38..9789d27e 100644 --- a/src/log/normal.c +++ b/src/log/normal.c @@ -233,7 +233,7 @@ void normal_log_test_abort(CR_UNUSED struct criterion_test_stats *stats, const c free(dup); } -struct criterion_output_provider normal_logging = { +struct criterion_logger normal_logging = { .log_pre_all = normal_log_pre_all, .log_pre_init = normal_log_pre_init, .log_pre_suite = normal_log_pre_suite, From d165e99e91d5f5ba550658f23d218d5b4a5e4517 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 5 Nov 2015 10:57:33 +0100 Subject: [PATCH 110/211] Relaxed io tests timeout to 1 second --- test/redirect.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/redirect.cc b/test/redirect.cc index daa4fbf1..3afd0ac5 100644 --- a/test/redirect.cc +++ b/test/redirect.cc @@ -4,7 +4,7 @@ #include <string> // set a timeout for I/O tests -TestSuite(redirect, .timeout = 0.1); +TestSuite(redirect, .timeout = 1); #if __GNUC__ >= 5 Test(redirect, mock) { From a046cb2b3bf8d5527637dd38966b746f9f42b1a0 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 6 Nov 2015 10:21:48 +0100 Subject: [PATCH 111/211] Added documentation for registering custom output providers --- doc/index.rst | 1 + doc/output.rst | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 doc/output.rst diff --git a/doc/index.rst b/doc/index.rst index 1b2183b3..edb8e4c3 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -10,6 +10,7 @@ Criterion assert hooks env + output parameterized theories internal diff --git a/doc/output.rst b/doc/output.rst new file mode 100644 index 00000000..da4db3ff --- /dev/null +++ b/doc/output.rst @@ -0,0 +1,36 @@ +Writing tests reports in a custom format +======================================== + +Outputs providers are used to write tests reports in the format of your choice: +for instance, TAP and XML reporting are implemented with output providers. + +Adding a custom output provider +------------------------------- + +An output provider is a function with the following signature: + +.. code-block:: c + + void func(FILE *out, struct criterion_global_stats *stats); + +Once implemented, you then need to register it as an output provider: + +.. code-block:: c + + criterion_register_output_provider("provider name", func); + +This needs to be done before the test runner stops, so you may want to register +it either in a self-provided main, or in a PRE_ALL or POST_ALL report hook. + +Writing to a file with an output provider +----------------------------------------- + +To tell criterion to write a report to a specific file using the output provider +of your choice, you need to call ``criterion_add_output``: + +.. code-block:: c + + criterion_add_output("provider name", "/path/to/file"); + +The path may be relative. If ``"-"`` is passed as a filename, the report will +be written to ``stderr``. From 68b1d4dfcd1d5f776fd0048808986527690bbd9f Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 7 Nov 2015 10:58:10 +0100 Subject: [PATCH 112/211] Added --output CLI switch --- doc/env.rst | 9 +++++++-- doc/output.rst | 10 +++++++++- src/entry/main.c | 17 ++++++++++++++++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/doc/env.rst b/doc/env.rst index 4291f799..db7a480e 100644 --- a/doc/env.rst +++ b/doc/env.rst @@ -24,11 +24,16 @@ Command line arguments * ``-S or --short-filename``: The filenames are displayed in their short form. * ``--always-succeed``: The process shall exit with a status of ``0``. * ``--tap[=FILE]``: Writes a TAP (Test Anything Protocol) report to FILE. - No file or ``"-"`` means ``stderr``. + No file or ``"-"`` means ``stderr``. This option is equivalent to + ``--output=tap:FILE``. * ``--xml[=FILE]``: Writes JUnit4 XML report to FILE. - No file or ``"-"`` means ``stderr``. + No file or ``"-"`` means ``stderr``. This option is equivalent to + ``--output=xml:FILE``. * ``--verbose[=level]``: Makes the output verbose. When provided with an integer, sets the verbosity level to that integer. +* ``-OPROVIDER:FILE or --output=PROVIDER:FILE``: Write a test report to FILE + using the output provider named by PROVIDER. FILE may be a relative path, or + ``"-"`` to write to ``stderr``. Shell Wildcard Pattern ---------------------- diff --git a/doc/output.rst b/doc/output.rst index da4db3ff..482a6315 100644 --- a/doc/output.rst +++ b/doc/output.rst @@ -26,7 +26,15 @@ Writing to a file with an output provider ----------------------------------------- To tell criterion to write a report to a specific file using the output provider -of your choice, you need to call ``criterion_add_output``: +of your choice, you can either pass ``--output`` as a command-line +parameter: + +.. code-block:: bash + + ./my_tests --output="provider name":/path/to/file + +Or, you can do so directly by calling ``criterion_add_output`` before the +runner stops: .. code-block:: c diff --git a/src/entry/main.c b/src/entry/main.c index 6a73b37d..5783fd95 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -149,6 +149,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { #endif {"always-succeed", no_argument, 0, 'y'}, {"no-early-exit", no_argument, 0, 'z'}, + {"output", required_argument, 0, 'O'}, {0, 0, 0, 0 } }; @@ -198,7 +199,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { bool do_print_version = false; bool do_print_usage = false; bool quiet = false; - for (int c; (c = getopt_long(argc, argv, "hvlfj:Sq", opts, NULL)) != -1;) { + for (int c; (c = getopt_long(argc, argv, "hvlfj:SqO:", opts, NULL)) != -1;) { switch (c) { case 'b': criterion_options.logging_threshold = atou(DEF(optarg, "1")); break; case 'y': criterion_options.always_succeed = true; break; @@ -216,6 +217,20 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { case 'l': do_list_tests = true; break; case 'v': do_print_version = true; break; case 'h': do_print_usage = true; break; + case 'O': { + char *arg = strdup(optarg); + char *buf; + strtok_r(arg, ":", &buf); + + char *path = strtok_r(NULL, ":", &buf); + if (arg == NULL || path == NULL) { + do_print_usage = true; + break; + } + + quiet = true; + criterion_add_output(arg, path); + } break; case '?': default : do_print_usage = handle_unknown_arg; break; } From e4b1a6b3da34f80ec1b2effc27ae1f826b79d1a6 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 8 Nov 2015 11:17:49 +0100 Subject: [PATCH 113/211] Fixed warnings in entry/main.c --- src/entry/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/entry/main.c b/src/entry/main.c index 5783fd95..9e96dfa3 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -29,6 +29,7 @@ #include "criterion/criterion.h" #include "criterion/options.h" #include "criterion/ordered-set.h" +#include "compat/strtok.h" #include "core/runner.h" #include "io/output.h" #include "config.h" @@ -219,7 +220,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { case 'h': do_print_usage = true; break; case 'O': { char *arg = strdup(optarg); - char *buf; + char *buf = NULL; strtok_r(arg, ":", &buf); char *path = strtok_r(NULL, ":", &buf); From c240b6ff2f95519013e89a885cc84e3fc40955de Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 10 Nov 2015 13:49:59 +0100 Subject: [PATCH 114/211] Added --output to CLI help message --- src/entry/main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/entry/main.c b/src/entry/main.c index 9e96dfa3..c4defad4 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -73,7 +73,9 @@ " --no-early-exit: do not exit the test worker " \ "prematurely after the test\n" \ " --verbose[=level]: sets verbosity to level " \ - "(1 by default)\n" + "(1 by default)\n" \ + " -OP:F or --output=PROVIDER=FILE: write test " \ + "report to FILE using the specified provider\n" int print_usage(char *progname) { fprintf(stderr, USAGE, progname); From 1b3be6458feb06ace38427562d479a1646e43f34 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 11 Nov 2015 14:10:23 +0100 Subject: [PATCH 115/211] Fixed missing import for windows compat in entry/main.c --- src/entry/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/entry/main.c b/src/entry/main.c index c4defad4..a1de7edb 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -29,6 +29,7 @@ #include "criterion/criterion.h" #include "criterion/options.h" #include "criterion/ordered-set.h" +#include "compat/posix.h" #include "compat/strtok.h" #include "core/runner.h" #include "io/output.h" From f940632c3a41d7c599fbef71d9ab47e1b3f192a5 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 7 Nov 2015 22:37:24 +0100 Subject: [PATCH 116/211] Added json output provider --- CMakeLists.txt | 1 + src/entry/main.c | 2 + src/io/json.c | 209 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 212 insertions(+) create mode 100644 src/io/json.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 266d38f7..4124c0a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,6 +135,7 @@ set(SOURCE_FILES src/io/output.h src/io/tap.c src/io/xml.c + src/io/json.c src/log/logging.c src/log/normal.c src/string/i18n.c diff --git a/src/entry/main.c b/src/entry/main.c index a1de7edb..6e561de7 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -142,6 +142,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { {"version", no_argument, 0, 'v'}, {"tap", optional_argument, 0, 't'}, {"xml", optional_argument, 0, 'x'}, + {"json", optional_argument, 0, 'n'}, {"help", no_argument, 0, 'h'}, {"list", no_argument, 0, 'l'}, {"ascii", no_argument, 0, 'k'}, @@ -218,6 +219,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { case 'q': quiet = true; break; case 't': quiet = true; criterion_add_output("tap", DEF(optarg, "-")); break; case 'x': quiet = true; criterion_add_output("xml", DEF(optarg, "-")); break; + case 'n': quiet = true; criterion_add_output("json", DEF(optarg, "-")); break; case 'l': do_list_tests = true; break; case 'v': do_print_version = true; break; case 'h': do_print_usage = true; break; diff --git a/src/io/json.c b/src/io/json.c new file mode 100644 index 00000000..6c4d9bda --- /dev/null +++ b/src/io/json.c @@ -0,0 +1,209 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#define _GNU_SOURCE +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "criterion/stats.h" +#include "criterion/logging.h" +#include "criterion/options.h" +#include "criterion/ordered-set.h" +#include "compat/posix.h" +#include "compat/strtok.h" +#include "compat/time.h" +#include "config.h" +#include "common.h" + +#define JSON_TEST_TEMPLATE_BEGIN \ + " {\n" \ + " \"name\": \"%s\",\n" \ + " \"assertions\": " CR_SIZE_T_FORMAT ",\n" \ + " \"status\": \"%s\"" + +#define JSON_TEST_TEMPLATE_END \ + "\n" \ + " }" + +#define JSON_TEST_FAILED_TEMPLATE_BEGIN \ + ",\n" \ + " \"messages\": [\n" + +#define JSON_TEST_FAILED_TEMPLATE_END \ + "\n" \ + " ]" + +#define JSON_FAILURE_MSG_ENTRY \ + " \"%s:%u: %s\"" + +#define JSON_CRASH_MSG_ENTRY \ + ",\n" \ + " \"messages\": [\"The test crashed.\"]" + +#define JSON_TIMEOUT_MSG_ENTRY \ + ",\n" \ + " \"messages\": [\"The test timed out.\"]" + +#define JSON_SKIPPED_MSG_ENTRY \ + ",\n" \ + " \"messages\": [\"The test was skipped.\"]" + +#define JSON_TEST_LIST_TEMPLATE_BEGIN \ + " \"tests\": [\n" + +#define JSON_TEST_LIST_TEMPLATE_END \ + " ]\n" + +#define JSON_TESTSUITE_TEMPLATE_BEGIN \ + " {\n" \ + " \"name\": \"%s\",\n" \ + " \"passed\": " CR_SIZE_T_FORMAT ",\n" \ + " \"failed\": " CR_SIZE_T_FORMAT ",\n" \ + " \"errored\": " CR_SIZE_T_FORMAT ",\n" \ + " \"skipped\": " CR_SIZE_T_FORMAT ",\n" + +#define JSON_TESTSUITE_TEMPLATE_END \ + " }" + +#define JSON_TESTSUITE_LIST_TEMPLATE_BEGIN \ + " \"test_suites\": [\n" + +#define JSON_TESTSUITE_LIST_TEMPLATE_END \ + " ]\n" + +#define JSON_BASE_TEMPLATE_BEGIN \ + "{\n" \ + " \"id\": \"Criterion v" VERSION "\",\n" \ + " \"passed\": " CR_SIZE_T_FORMAT ",\n" \ + " \"failed\": " CR_SIZE_T_FORMAT ",\n" \ + " \"errored\": " CR_SIZE_T_FORMAT ",\n" \ + " \"skipped\": " CR_SIZE_T_FORMAT ",\n" \ + +#define JSON_BASE_TEMPLATE_END \ + "}\n" + +static INLINE bool is_disabled(struct criterion_test *t, struct criterion_suite *s) { + return t->data->disabled || (s->data && s->data->disabled); +} + +static CR_INLINE +const char *get_status_string(struct criterion_test_stats *ts, + struct criterion_suite_stats *ss) { + + const char *status = "PASSED"; + if (ts->crashed || ts->timed_out) + status = "ERRORED"; + else if (ts->failed) + status = "FAILED"; + else if (is_disabled(ts->test, ss->suite)) + status = "SKIPPED"; + return status; +} + +static void print_test(struct criterion_test_stats *ts, + struct criterion_suite_stats *ss) { + + criterion_important(JSON_TEST_TEMPLATE_BEGIN, + ts->test->name, + (size_t) (ts->passed_asserts + ts->failed_asserts), + get_status_string(ts, ss) + ); + + if (is_disabled(ts->test, ss->suite)) { + criterion_important(JSON_SKIPPED_MSG_ENTRY); + } else if (ts->crashed) { + criterion_important(JSON_CRASH_MSG_ENTRY); + } else if (ts->timed_out) { + criterion_important(JSON_TIMEOUT_MSG_ENTRY); + } else if (ts->failed) { + criterion_important(JSON_TEST_FAILED_TEMPLATE_BEGIN); + + bool first = true; + for (struct criterion_assert_stats *asrt = ts->asserts; asrt; asrt = asrt->next) { + if (!asrt->passed) { + if (!first) { + criterion_important(",\n"); + } else { + first = false; + } + + bool sf = criterion_options.short_filename; + char *dup = strdup(*asrt->message ? asrt->message : ""); + char *saveptr = NULL; + char *line = strtok_r(dup, "\n", &saveptr); + + criterion_important(JSON_FAILURE_MSG_ENTRY, + sf ? basename_compat(asrt->file) : asrt->file, + asrt->line, + line + ); + + while ((line = strtok_r(NULL, "\n", &saveptr))) { + criterion_important(",\n \" %s\"\n", line); + } + free(dup); + } + } + criterion_important(JSON_TEST_FAILED_TEMPLATE_END); + } + + criterion_important(JSON_TEST_TEMPLATE_END); +} + +void json_log_post_all(struct criterion_global_stats *stats) { + criterion_important(JSON_BASE_TEMPLATE_BEGIN, + stats->tests_passed, + stats->tests_failed, + stats->tests_crashed, + stats->tests_skipped + ); + + criterion_important(JSON_TESTSUITE_LIST_TEMPLATE_BEGIN); + for (struct criterion_suite_stats *ss = stats->suites; ss; ss = ss->next) { + + criterion_important(JSON_TESTSUITE_TEMPLATE_BEGIN, + ss->suite->name, + ss->tests_passed, + ss->tests_failed, + ss->tests_crashed, + ss->tests_skipped + ); + + criterion_important(JSON_TEST_LIST_TEMPLATE_BEGIN); + for (struct criterion_test_stats *ts = ss->tests; ts; ts = ts->next) { + print_test(ts, ss); + criterion_important(ts->next ? ",\n" : "\n"); + } + criterion_important(JSON_TEST_LIST_TEMPLATE_END); + + criterion_important(JSON_TESTSUITE_TEMPLATE_END); + criterion_important(ss->next ? ",\n" : "\n"); + } + criterion_important(JSON_TESTSUITE_LIST_TEMPLATE_END); + + criterion_important(JSON_BASE_TEMPLATE_END); +} + +struct criterion_output_provider json_logging = { + .log_post_all = json_log_post_all, +}; From e59adbff47eb7eed71f0bef6d21c3f29d87926c0 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 9 Nov 2015 01:18:56 +0100 Subject: [PATCH 117/211] Updated json reporter for the new reporting system --- src/core/runner.c | 1 + src/io/json.c | 51 ++++++++++++++++++++++------------------------- src/io/output.h | 1 + 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/core/runner.c b/src/core/runner.c index 6ebae261..22a0f911 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -350,6 +350,7 @@ struct criterion_test_set *criterion_initialize(void) { criterion_register_output_provider("tap", tap_report); criterion_register_output_provider("xml", xml_report); + criterion_register_output_provider("json", json_report); return criterion_init(); } diff --git a/src/io/json.c b/src/io/json.c index 6c4d9bda..c23ebdcf 100644 --- a/src/io/json.c +++ b/src/io/json.c @@ -120,29 +120,30 @@ const char *get_status_string(struct criterion_test_stats *ts, return status; } -static void print_test(struct criterion_test_stats *ts, +static void print_test(FILE *f, + struct criterion_test_stats *ts, struct criterion_suite_stats *ss) { - criterion_important(JSON_TEST_TEMPLATE_BEGIN, + fprintf(f, JSON_TEST_TEMPLATE_BEGIN, ts->test->name, (size_t) (ts->passed_asserts + ts->failed_asserts), get_status_string(ts, ss) ); if (is_disabled(ts->test, ss->suite)) { - criterion_important(JSON_SKIPPED_MSG_ENTRY); + fprintf(f, JSON_SKIPPED_MSG_ENTRY); } else if (ts->crashed) { - criterion_important(JSON_CRASH_MSG_ENTRY); + fprintf(f, JSON_CRASH_MSG_ENTRY); } else if (ts->timed_out) { - criterion_important(JSON_TIMEOUT_MSG_ENTRY); + fprintf(f, JSON_TIMEOUT_MSG_ENTRY); } else if (ts->failed) { - criterion_important(JSON_TEST_FAILED_TEMPLATE_BEGIN); + fprintf(f, JSON_TEST_FAILED_TEMPLATE_BEGIN); bool first = true; for (struct criterion_assert_stats *asrt = ts->asserts; asrt; asrt = asrt->next) { if (!asrt->passed) { if (!first) { - criterion_important(",\n"); + fprintf(f, ",\n"); } else { first = false; } @@ -152,36 +153,36 @@ static void print_test(struct criterion_test_stats *ts, char *saveptr = NULL; char *line = strtok_r(dup, "\n", &saveptr); - criterion_important(JSON_FAILURE_MSG_ENTRY, + fprintf(f, JSON_FAILURE_MSG_ENTRY, sf ? basename_compat(asrt->file) : asrt->file, asrt->line, line ); while ((line = strtok_r(NULL, "\n", &saveptr))) { - criterion_important(",\n \" %s\"\n", line); + fprintf(f, ",\n \" %s\"\n", line); } free(dup); } } - criterion_important(JSON_TEST_FAILED_TEMPLATE_END); + fprintf(f, JSON_TEST_FAILED_TEMPLATE_END); } - criterion_important(JSON_TEST_TEMPLATE_END); + fprintf(f, JSON_TEST_TEMPLATE_END); } -void json_log_post_all(struct criterion_global_stats *stats) { - criterion_important(JSON_BASE_TEMPLATE_BEGIN, +void json_report(FILE *f, struct criterion_global_stats *stats) { + fprintf(f, JSON_BASE_TEMPLATE_BEGIN, stats->tests_passed, stats->tests_failed, stats->tests_crashed, stats->tests_skipped ); - criterion_important(JSON_TESTSUITE_LIST_TEMPLATE_BEGIN); + fprintf(f, JSON_TESTSUITE_LIST_TEMPLATE_BEGIN); for (struct criterion_suite_stats *ss = stats->suites; ss; ss = ss->next) { - criterion_important(JSON_TESTSUITE_TEMPLATE_BEGIN, + fprintf(f, JSON_TESTSUITE_TEMPLATE_BEGIN, ss->suite->name, ss->tests_passed, ss->tests_failed, @@ -189,21 +190,17 @@ void json_log_post_all(struct criterion_global_stats *stats) { ss->tests_skipped ); - criterion_important(JSON_TEST_LIST_TEMPLATE_BEGIN); + fprintf(f, JSON_TEST_LIST_TEMPLATE_BEGIN); for (struct criterion_test_stats *ts = ss->tests; ts; ts = ts->next) { - print_test(ts, ss); - criterion_important(ts->next ? ",\n" : "\n"); + print_test(f, ts, ss); + fprintf(f, ts->next ? ",\n" : "\n"); } - criterion_important(JSON_TEST_LIST_TEMPLATE_END); + fprintf(f, JSON_TEST_LIST_TEMPLATE_END); - criterion_important(JSON_TESTSUITE_TEMPLATE_END); - criterion_important(ss->next ? ",\n" : "\n"); + fprintf(f, JSON_TESTSUITE_TEMPLATE_END); + fprintf(f, ss->next ? ",\n" : "\n"); } - criterion_important(JSON_TESTSUITE_LIST_TEMPLATE_END); + fprintf(f, JSON_TESTSUITE_LIST_TEMPLATE_END); - criterion_important(JSON_BASE_TEMPLATE_END); + fprintf(f, JSON_BASE_TEMPLATE_END); } - -struct criterion_output_provider json_logging = { - .log_post_all = json_log_post_all, -}; diff --git a/src/io/output.h b/src/io/output.h index 576ac342..eccf24bf 100644 --- a/src/io/output.h +++ b/src/io/output.h @@ -31,5 +31,6 @@ void criterion_free_output(void); void tap_report(FILE *f, struct criterion_global_stats *stats); void xml_report(FILE *f, struct criterion_global_stats *stats); +void json_report(FILE *f, struct criterion_global_stats *stats); #endif /* !OUTPUT_H_ */ From 3cfb0aa5a8bb97237461968c979d92c348e0a65e Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 11 Nov 2015 13:26:49 +0100 Subject: [PATCH 118/211] Added documentation for --json --- doc/env.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/env.rst b/doc/env.rst index 5ff950ca..234a4966 100644 --- a/doc/env.rst +++ b/doc/env.rst @@ -29,6 +29,9 @@ Command line arguments * ``--xml[=FILE]``: Writes JUnit4 XML report to FILE. No file or ``"-"`` means ``stderr``. This option is equivalent to ``--output=xml:FILE``. +* ``--json[=FILE]``: Writes a JSON report to FILE. + No file or ``"-"`` means ``stderr``. This option is equivalent to + ``--output=json:FILE``. * ``--verbose[=level]``: Makes the output verbose. When provided with an integer, sets the verbosity level to that integer. * ``-OPROVIDER:FILE or --output=PROVIDER:FILE``: Write a test report to FILE From 3c9086dd6374c923d72c5936f2ae3d4c1ec95b4a Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 11 Nov 2015 13:41:08 +0100 Subject: [PATCH 119/211] Fixed typo in json output --- src/io/json.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/io/json.c b/src/io/json.c index c23ebdcf..a893e57e 100644 --- a/src/io/json.c +++ b/src/io/json.c @@ -160,7 +160,7 @@ static void print_test(FILE *f, ); while ((line = strtok_r(NULL, "\n", &saveptr))) { - fprintf(f, ",\n \" %s\"\n", line); + fprintf(f, ",\n \" %s\"", line); } free(dup); } From a6ff1f110cc527c01fe823163b96644c23987948 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 11 Nov 2015 13:41:47 +0100 Subject: [PATCH 120/211] Added json regression test --- samples/CMakeLists.txt | 1 + samples/tests/json_test.sh | 7 + .../tests/outputs/json_test.sh.err.expected | 237 ++++++++++++++++++ .../tests/outputs/json_test.sh.out.expected | 0 4 files changed, 245 insertions(+) create mode 100755 samples/tests/json_test.sh create mode 100644 samples/tests/outputs/json_test.sh.err.expected create mode 100644 samples/tests/outputs/json_test.sh.out.expected diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 954dd097..cfe0e39b 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -35,6 +35,7 @@ set(SAMPLES set(SCRIPTS tap_test xml_test + json_test early_exit verbose list diff --git a/samples/tests/json_test.sh b/samples/tests/json_test.sh new file mode 100755 index 00000000..2546c00e --- /dev/null +++ b/samples/tests/json_test.sh @@ -0,0 +1,7 @@ +#!/bin/sh +./simple.c.bin --json --always-succeed +./signal.c.bin --json --always-succeed +./asserts.c.bin --json --always-succeed +./more-suites.c.bin --json --always-succeed +./tests/long-messages.c.bin --json --always-succeed +./description.c.bin --json --always-succeed diff --git a/samples/tests/outputs/json_test.sh.err.expected b/samples/tests/outputs/json_test.sh.err.expected new file mode 100644 index 00000000..001f0dc1 --- /dev/null +++ b/samples/tests/outputs/json_test.sh.err.expected @@ -0,0 +1,237 @@ +{ + "id": "Criterion v2.1.0", + "passed": 1, + "failed": 1, + "errored": 0, + "skipped": 0, + "test_suites": [ + { + "name": "misc", + "passed": 1, + "failed": 1, + "errored": 0, + "skipped": 0, + "tests": [ + { + "name": "passing", + "assertions": 1, + "status": "PASSED" + }, + { + "name": "failing", + "assertions": 1, + "status": "FAILED", + "messages": [ + "simple.c:4: The expression 0 is false." + ] + } + ] + } + ] +} +{ + "id": "Criterion v2.1.0", + "passed": 1, + "failed": 2, + "errored": 1, + "skipped": 0, + "test_suites": [ + { + "name": "simple", + "passed": 1, + "failed": 2, + "errored": 1, + "skipped": 0, + "tests": [ + { + "name": "wrong_signal", + "assertions": 0, + "status": "FAILED", + "messages": [ + + ] + }, + { + "name": "uncaught", + "assertions": 0, + "status": "ERRORED", + "messages": ["The test crashed."] + }, + { + "name": "caught", + "assertions": 0, + "status": "PASSED" + } + ] + } + ] +} +{ + "id": "Criterion v2.1.0", + "passed": 4, + "failed": 2, + "errored": 0, + "skipped": 0, + "test_suites": [ + { + "name": "asserts", + "passed": 4, + "failed": 2, + "errored": 0, + "skipped": 0, + "tests": [ + { + "name": "string", + "assertions": 10, + "status": "PASSED" + }, + { + "name": "old_school", + "assertions": 2, + "status": "FAILED", + "messages": [ + "asserts.c:18: The conditions for this assertion were not met.", + "asserts.c:17: You can fail an assertion with a message from anywhere" + ] + }, + { + "name": "native", + "assertions": 8, + "status": "PASSED" + }, + { + "name": "float", + "assertions": 2, + "status": "PASSED" + }, + { + "name": "base", + "assertions": 6, + "status": "FAILED", + "messages": [ + "asserts.c:12: This assert runs", + "asserts.c:11: assert is fatal, expect isn't" + ] + }, + { + "name": "array", + "assertions": 3, + "status": "PASSED" + } + ] + } + ] +} +{ + "id": "Criterion v2.1.0", + "passed": 2, + "failed": 0, + "errored": 0, + "skipped": 1, + "test_suites": [ + { + "name": "suite2", + "passed": 1, + "failed": 0, + "errored": 0, + "skipped": 0, + "tests": [ + { + "name": "test", + "assertions": 1, + "status": "PASSED" + } + ] + }, + { + "name": "suite1", + "passed": 1, + "failed": 0, + "errored": 0, + "skipped": 0, + "tests": [ + { + "name": "test", + "assertions": 1, + "status": "PASSED" + } + ] + }, + { + "name": "disabled", + "passed": 0, + "failed": 0, + "errored": 0, + "skipped": 1, + "tests": [ + { + "name": "test", + "assertions": 0, + "status": "SKIPPED", + "messages": ["The test was skipped."] + } + ] + } + ] +} +{ + "id": "Criterion v2.1.0", + "passed": 0, + "failed": 1, + "errored": 0, + "skipped": 0, + "test_suites": [ + { + "name": "sample", + "passed": 0, + "failed": 1, + "errored": 0, + "skipped": 0, + "tests": [ + { + "name": "long_msg", + "assertions": 1, + "status": "FAILED", + "messages": [ + "long-messages.c:4: This is", + " A long message", + " Spawning multiple lines.", + " Formatting is respected." + ] + } + ] + } + ] +} +{ + "id": "Criterion v2.1.0", + "passed": 0, + "failed": 1, + "errored": 0, + "skipped": 1, + "test_suites": [ + { + "name": "misc", + "passed": 0, + "failed": 1, + "errored": 0, + "skipped": 1, + "tests": [ + { + "name": "skipped", + "assertions": 0, + "status": "SKIPPED", + "messages": ["The test was skipped."] + }, + { + "name": "failing", + "assertions": 1, + "status": "FAILED", + "messages": [ + "description.c:4: The expression 0 is false." + ] + } + ] + } + ] +} diff --git a/samples/tests/outputs/json_test.sh.out.expected b/samples/tests/outputs/json_test.sh.out.expected new file mode 100644 index 00000000..e69de29b From 586be28378578d3c08edb1f8fd9d28b4f83ebf6e Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 11 Nov 2015 13:45:52 +0100 Subject: [PATCH 121/211] Fixed script regression tests --- samples/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 954dd097..d707767c 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -79,13 +79,13 @@ add_samples("${CMAKE_CURRENT_LIST_DIR}/tests" "${SAMPLES}") if (NOT MSVC) # we disable the scripted tests when building with MSVC foreach(script ${SCRIPTS}) - add_test(${script} sh ${CMAKE_CURRENT_LIST_DIR}/tests/${script}.sh) + add_test(${script} sh "${CMAKE_CURRENT_LIST_DIR}/tests/${script}.sh") set_property(TEST ${script} PROPERTY ENVIRONMENT "CRITERION_ALWAYS_SUCCEED=1" ENVIRONMENT "CRITERION_NO_EARLY_EXIT=1" # for coverage ) - add_test(${script}_compare sh ${CMAKE_CURRENT_LIST_DIR}/tests/run_test.sh "${CMAKE_CURRENT_LIST_DIR}" . "${CMAKE_CURRENT_LIST_DIR}" tests/${script}) + add_test(${script}_compare sh ${CMAKE_CURRENT_LIST_DIR}/tests/run_test.sh "${CMAKE_CURRENT_LIST_DIR}" . "${CMAKE_CURRENT_LIST_DIR}" "tests/${script}.sh") set_property(TEST ${script}_compare PROPERTY ENVIRONMENT "LC_ALL=en_US.utf8" ENVIRONMENT "CRITERION_ALWAYS_SUCCEED=1" From 17f16f60ce2e80809768813dd340d94b0ee5148a Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 11 Nov 2015 13:48:18 +0100 Subject: [PATCH 122/211] Updated gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e28ebbfa..4cc4aa25 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,7 @@ !*.po !*.in !samples/tests/*.sh -!samples/*.expected +!samples/**/*.expected !LICENSE !HEADER From 3e5f43ff74cd5099b8f76362e2de7838beacc851 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 11 Nov 2015 13:52:22 +0100 Subject: [PATCH 123/211] Fixed XML regression tests --- .../tests/outputs/xml_test.sh.err.expected | 82 +++++++++++++++++++ .../tests/outputs/xml_test.sh.out.expected | 0 samples/tests/xml_test.sh | 2 +- 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 samples/tests/outputs/xml_test.sh.err.expected create mode 100644 samples/tests/outputs/xml_test.sh.out.expected diff --git a/samples/tests/outputs/xml_test.sh.err.expected b/samples/tests/outputs/xml_test.sh.err.expected new file mode 100644 index 00000000..b3f83625 --- /dev/null +++ b/samples/tests/outputs/xml_test.sh.err.expected @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Tests compiled with Criterion v2.1.0 --> +<testsuites name="Criterion Tests" tests="2" failures="1" errors="0" disabled="0"> + <testsuite name="misc" tests="2" failures="1" errors="0" disabled="0" skipped="0"> + <testcase name="passing" assertions="1" status="PASSED"> + </testcase> + <testcase name="failing" assertions="1" status="FAILED"> + <failure type="assert" message="1 assertion(s) failed.">simple.c:4: The expression 0 is false. </failure> + </testcase> + </testsuite> +</testsuites> +<?xml version="1.0" encoding="UTF-8"?> +<!-- Tests compiled with Criterion v2.1.0 --> +<testsuites name="Criterion Tests" tests="3" failures="2" errors="1" disabled="0"> + <testsuite name="simple" tests="3" failures="2" errors="1" disabled="0" skipped="0"> + <testcase name="wrong_signal" assertions="0" status="FAILED"> + <failure type="assert" message="0 assertion(s) failed."></failure> + </testcase> + <testcase name="uncaught" assertions="0" status="ERRORED"> + <error type="crash" message="The test crashed." /> </testcase> + <testcase name="caught" assertions="0" status="PASSED"> + </testcase> + </testsuite> +</testsuites> +<?xml version="1.0" encoding="UTF-8"?> +<!-- Tests compiled with Criterion v2.1.0 --> +<testsuites name="Criterion Tests" tests="6" failures="2" errors="0" disabled="0"> + <testsuite name="asserts" tests="6" failures="2" errors="0" disabled="0" skipped="0"> + <testcase name="string" assertions="10" status="PASSED"> + </testcase> + <testcase name="old_school" assertions="2" status="FAILED"> + <failure type="assert" message="2 assertion(s) failed.">asserts.c:18: The conditions for this assertion were not met. asserts.c:17: You can fail an assertion with a message from anywhere </failure> + </testcase> + <testcase name="native" assertions="8" status="PASSED"> + </testcase> + <testcase name="float" assertions="2" status="PASSED"> + </testcase> + <testcase name="base" assertions="6" status="FAILED"> + <failure type="assert" message="2 assertion(s) failed.">asserts.c:12: This assert runs asserts.c:11: assert is fatal, expect isn't </failure> + </testcase> + <testcase name="array" assertions="3" status="PASSED"> + </testcase> + </testsuite> +</testsuites> +<?xml version="1.0" encoding="UTF-8"?> +<!-- Tests compiled with Criterion v2.1.0 --> +<testsuites name="Criterion Tests" tests="3" failures="0" errors="0" disabled="1"> + <testsuite name="suite2" tests="1" failures="0" errors="0" disabled="0" skipped="0"> + <testcase name="test" assertions="1" status="PASSED"> + </testcase> + </testsuite> + <testsuite name="suite1" tests="1" failures="0" errors="0" disabled="0" skipped="0"> + <testcase name="test" assertions="1" status="PASSED"> + </testcase> + </testsuite> + <testsuite name="disabled" tests="1" failures="0" errors="0" disabled="1" skipped="1"> + <testcase name="test" assertions="0" status="SKIPPED"> + <skipped/> + </testcase> + </testsuite> +</testsuites> +<?xml version="1.0" encoding="UTF-8"?> +<!-- Tests compiled with Criterion v2.1.0 --> +<testsuites name="Criterion Tests" tests="1" failures="1" errors="0" disabled="0"> + <testsuite name="sample" tests="1" failures="1" errors="0" disabled="0" skipped="0"> + <testcase name="long_msg" assertions="1" status="FAILED"> + <failure type="assert" message="1 assertion(s) failed.">long-messages.c:4: This is A long message Spawning multiple lines. Formatting is respected. </failure> + </testcase> + </testsuite> +</testsuites> +<?xml version="1.0" encoding="UTF-8"?> +<!-- Tests compiled with Criterion v2.1.0 --> +<testsuites name="Criterion Tests" tests="2" failures="1" errors="0" disabled="1"> + <testsuite name="misc" tests="2" failures="1" errors="0" disabled="1" skipped="1"> + <testcase name="skipped" assertions="0" status="SKIPPED"> + <skipped/> + </testcase> + <testcase name="failing" assertions="1" status="FAILED"> + <failure type="assert" message="1 assertion(s) failed.">description.c:4: The expression 0 is false. </failure> + </testcase> + </testsuite> +</testsuites> diff --git a/samples/tests/outputs/xml_test.sh.out.expected b/samples/tests/outputs/xml_test.sh.out.expected new file mode 100644 index 00000000..e69de29b diff --git a/samples/tests/xml_test.sh b/samples/tests/xml_test.sh index 9f0ab261..d0740d92 100755 --- a/samples/tests/xml_test.sh +++ b/samples/tests/xml_test.sh @@ -3,5 +3,5 @@ ./signal.c.bin --xml --always-succeed ./asserts.c.bin --xml --always-succeed ./more-suites.c.bin --xml --always-succeed -./long-messages.c.bin --xml --always-succeed +./tests/long-messages.c.bin --xml --always-succeed ./description.c.bin --xml --always-succeed From f6cf64f71f81c9b1f5c2b3a71eed679bf1376cd1 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 12 Nov 2015 16:02:33 +0100 Subject: [PATCH 124/211] Cleaned up travis config --- .travis.yml | 87 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 66 insertions(+), 21 deletions(-) diff --git a/.travis.yml b/.travis.yml index bf515dda..aa4ddb60 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,9 @@ language: c -os: -- linux -- osx - -compiler: -- gcc-4.9 sudo: false +osx_image: xcode7 + addons: apt: sources: @@ -17,33 +13,82 @@ addons: - g++-4.9 - gobjc-4.9 - gnustep-devel -env: - global: - GCOV: gcov-4.9 - CXX: g++-4.9 - matrix: - - CONFIGURATION=Debug COVERAGE=ON - - CONFIGURATION=Release COVERAGE=OFF - - CONFIGURATION=RelWithDebInfo COVERAGE=OFF + +matrix: + include: + # Linux Debug, GCC 4.9 + - compiler: gcc-4.9 + env: + CONFIGURATION: Debug + GCOV: gcov-4.9 + CMAKE_OPTS: -DLANG_OBJC=ON + COVERAGE: ON + # Linux Release, GCC 4.9 + - compiler: gcc-4.9 + env: + CONFIGURATION: Release + CMAKE_OPTS: -DLANG_OBJC=ON + # Linux RelWithDebInfo, GCC 4.9 + - compiler: gcc-4.9 + env: + CONFIGURATION: RelWithDebInfo + CMAKE_OPTS: -DLANG_OBJC=ON + DEPLOY: true + # OSX Debug, GCC 4.9 + - os: osx + compiler: gcc-4.9 + env: + CONFIGURATION: Debug + GCOV: gcov-4.9 + COVERAGE: ON + # OSX Release, GCC 4.9 + - os: osx + compiler: gcc-4.9 + env: CONFIGURATION=Release + # OSX RelWithDebInfo, GCC 4.9 + - os: osx + compiler: gcc-4.9 + env: CONFIGURATION=RelWithDebInfo + # OSX Debug, Clang + - os: osx + compiler: clang + env: + CONFIGURATION: Debug + CMAKE_OPTS: -DLANG_OBJC=ON + # OSX Release, Clang + - os: osx + compiler: clang + env: + CONFIGURATION: Release + CMAKE_OPTS: -DLANG_OBJC=ON + # OSX RelWithDebInfo, Clang + - os: osx + compiler: clang + env: + CONFIGURATION: RelWithDebInfo + CMAKE_OPTS: -DLANG_OBJC=ON + DEPLOY: true script: - - mkdir -p build - - cd build + - export CXX=${${CC/gcc/g++/}/clang/clang++} + - mkdir -p build && cd $_ - > cmake -Wno-dev -DCTESTS=ON - -DCOVERALLS=${COVERAGE} + -DCOVERALLS=${COVERAGE:-OFF} -DCMAKE_BUILD_TYPE=${CONFIGURATION} -DCMAKE_INSTALL_PREFIX=criterion-${TRAVIS_TAG} - -DLANG_OBJC=ON + ${CMAKE_OPTS} .. - TERM=dumb cmake --build . --target criterion_tests -- -j4 - ctest -j4 after_success: - - make gcov - - bash <(curl -s https://codecov.io/bash) + - > + [ "$COVERAGE" = "ON" ] && + make gcov && + bash <(curl -s https://codecov.io/bash) after_failure: - cat Testing/Temporary/LastTest.log samples/*.{out,err} ../samples/tests/*.{out,err} @@ -61,4 +106,4 @@ deploy: on: repo: Snaipe/Criterion tags: true - condition: $CONFIGURATION = RelWithDebInfo + condition: $DEPLOY = true From 022cc88e247d2c6e14ea5e7e3b64ecf70b183e69 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 12 Nov 2015 16:20:40 +0100 Subject: [PATCH 125/211] Fixed substitution chaining not working on bash --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index aa4ddb60..216d04f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -70,7 +70,8 @@ matrix: DEPLOY: true script: - - export CXX=${${CC/gcc/g++/}/clang/clang++} + - export CXX=${CC/gcc/g++/} + - export CXX=${CXX/clang/clang++} - mkdir -p build && cd $_ - > cmake From 947bdbf4e191792eb1b405162aef76860e17703b Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 12 Nov 2015 16:23:25 +0100 Subject: [PATCH 126/211] Fixed typo in travis config --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 216d04f3..109e4e6b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -70,8 +70,7 @@ matrix: DEPLOY: true script: - - export CXX=${CC/gcc/g++/} - - export CXX=${CXX/clang/clang++} + - export CXX=${CC/gcc/g++}; export CXX=${CXX/clang/clang++} - mkdir -p build && cd $_ - > cmake From b25756b46e520fcc2ec7d70a7b4bf79b162373c2 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 12 Nov 2015 16:36:42 +0100 Subject: [PATCH 127/211] Install cmake on travis osx build --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index 109e4e6b..f5328bd7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -69,6 +69,13 @@ matrix: CMAKE_OPTS: -DLANG_OBJC=ON DEPLOY: true +before_install: + - > + [ "$TRAVIS_OS_NAME" = "osx" ] && ( + brew update; + brew outdated cmake || brew upgrade cmake + ) + script: - export CXX=${CC/gcc/g++}; export CXX=${CXX/clang/clang++} - mkdir -p build && cd $_ From 4322fb50cf91a2e0dd134c137782059e9571da71 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 12 Nov 2015 16:45:32 +0100 Subject: [PATCH 128/211] Fixed travis script conditions --- .travis.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index f5328bd7..cc657c36 100644 --- a/.travis.yml +++ b/.travis.yml @@ -70,11 +70,11 @@ matrix: DEPLOY: true before_install: - - > - [ "$TRAVIS_OS_NAME" = "osx" ] && ( + - | + if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; brew outdated cmake || brew upgrade cmake - ) + fi script: - export CXX=${CC/gcc/g++}; export CXX=${CXX/clang/clang++} @@ -92,10 +92,11 @@ script: - ctest -j4 after_success: - - > - [ "$COVERAGE" = "ON" ] && - make gcov && - bash <(curl -s https://codecov.io/bash) + - | + if [ "$COVERAGE" = "ON" ]; then + make gcov + bash <(curl -s https://codecov.io/bash) + fi after_failure: - cat Testing/Temporary/LastTest.log samples/*.{out,err} ../samples/tests/*.{out,err} From 03ed0a910a217997c59fda24ca229f9e2e809c73 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 12 Nov 2015 16:54:48 +0100 Subject: [PATCH 129/211] Switched OSX image to default on travis CI builds --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index cc657c36..f773b186 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,6 @@ language: c sudo: false -osx_image: xcode7 - addons: apt: sources: @@ -73,11 +71,13 @@ before_install: - | if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; - brew outdated cmake || brew upgrade cmake + brew install llvm --with-clang --with-asan --HEAD fi + - export CXX=${CC/gcc/g++}; export CXX=${CXX/clang/clang++} + - $CC --version + - $CXX --version script: - - export CXX=${CC/gcc/g++}; export CXX=${CXX/clang/clang++} - mkdir -p build && cd $_ - > cmake From 62e01eed74d0b98de3ff3fb3b0b79d7fa8741e48 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 12 Nov 2015 17:02:14 +0100 Subject: [PATCH 130/211] Removed clang installation on OSX gcc builds --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f773b186..a362b033 100644 --- a/.travis.yml +++ b/.travis.yml @@ -69,7 +69,7 @@ matrix: before_install: - | - if [ "$TRAVIS_OS_NAME" = "osx" ]; then + if [ "$TRAVIS_OS_NAME" = "osx" ] && [ "$CC" = "clang" ]; then brew update; brew install llvm --with-clang --with-asan --HEAD fi From e41b3a6572742291c2af00c2208dfd60e7b83d49 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 12 Nov 2015 17:13:41 +0100 Subject: [PATCH 131/211] Removed source build for clang on osx travis builds --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a362b033..3426f55d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -70,8 +70,9 @@ matrix: before_install: - | if [ "$TRAVIS_OS_NAME" = "osx" ] && [ "$CC" = "clang" ]; then - brew update; - brew install llvm --with-clang --with-asan --HEAD + brew update + brew unlink cmake + brew install llvm cmake fi - export CXX=${CC/gcc/g++}; export CXX=${CXX/clang/clang++} - $CC --version From c77ec236780a36dc0f146d87af21515a5efd24ee Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 12 Nov 2015 23:37:13 +0100 Subject: [PATCH 132/211] Fixed regression test for TAP output format --- .../tests/outputs/tap_test.sh.err.expected | 61 +++++++++++++++++++ .../tests/outputs/tap_test.sh.out.expected | 0 samples/tests/tap_test.sh | 2 +- 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 samples/tests/outputs/tap_test.sh.err.expected create mode 100644 samples/tests/outputs/tap_test.sh.out.expected diff --git a/samples/tests/outputs/tap_test.sh.err.expected b/samples/tests/outputs/tap_test.sh.err.expected new file mode 100644 index 00000000..56f3268c --- /dev/null +++ b/samples/tests/outputs/tap_test.sh.err.expected @@ -0,0 +1,61 @@ +TAP version 13 +1..2 +# Criterion v2.1.0 + +# Running 2 tests from misc +ok - misc::passing (0.00s) +not ok - misc::failing (0.00s) + simple.c:4: Assertion failed: The expression 0 is false. +TAP version 13 +1..3 +# Criterion v2.1.0 + +# Running 3 tests from simple +not ok - simple::wrong_signal (0.00s) +not ok - simple::uncaught unexpected signal after signal.c:16 +ok - simple::caught (0.00s) +TAP version 13 +1..6 +# Criterion v2.1.0 + +# Running 6 tests from asserts +ok - asserts::string (0.00s) +not ok - asserts::old_school (0.00s) + asserts.c:18: Assertion failed: The conditions for this assertion were not met. + asserts.c:17: Assertion failed: You can fail an assertion with a message from anywhere +ok - asserts::native (0.00s) +ok - asserts::float (0.00s) +not ok - asserts::base (0.00s) + asserts.c:12: Assertion failed: This assert runs + asserts.c:11: Assertion failed: assert is fatal, expect isn't +ok - asserts::array (0.00s) +TAP version 13 +1..3 +# Criterion v2.1.0 + +# Running 1 tests from suite2 +ok - suite2::test (0.00s) + +# Running 1 tests from suite1 +ok - suite1::test (0.00s) + +# Running 1 tests from disabled +ok - disabled::test # SKIP suite is disabled +TAP version 13 +1..1 +# Criterion v2.1.0 + +# Running 1 tests from sample +not ok - sample::long_msg (0.00s) + long-messages.c:4: Assertion failed: This is + A long message + Spawning multiple lines. + Formatting is respected. +TAP version 13 +1..2 +# Criterion v2.1.0 + +# Running 2 tests from misc +ok - misc::skipped This one is skipped # SKIP test is disabled +not ok - misc::failing Just a failing test (0.00s) + description.c:4: Assertion failed: The expression 0 is false. diff --git a/samples/tests/outputs/tap_test.sh.out.expected b/samples/tests/outputs/tap_test.sh.out.expected new file mode 100644 index 00000000..e69de29b diff --git a/samples/tests/tap_test.sh b/samples/tests/tap_test.sh index 5e81fbf6..9faca2d2 100755 --- a/samples/tests/tap_test.sh +++ b/samples/tests/tap_test.sh @@ -3,5 +3,5 @@ ./signal.c.bin --tap --always-succeed ./asserts.c.bin --tap --always-succeed ./more-suites.c.bin --tap --always-succeed -./long-messages.c.bin --tap --always-succeed +./tests/long-messages.c.bin --tap --always-succeed ./description.c.bin --tap --always-succeed From 161719070c972a12afe36b42c2a18ea1e58ed765 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 13 Nov 2015 19:31:32 +0100 Subject: [PATCH 133/211] Fixed recent MinGW builds failing due to quick fix on the definitions of off_t and off64_t --- src/compat/internal.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/compat/internal.h b/src/compat/internal.h index 551212b9..5a04bdc1 100644 --- a/src/compat/internal.h +++ b/src/compat/internal.h @@ -30,9 +30,19 @@ # undef _WIN32_WINNT # define _WIN32_WINNT 0x0502 # include <windows.h> + +# include <stdint.h> + +typedef int32_t cr_off32 +typedef int64_t cr_off64 + # if defined(__MINGW32__) || defined(__MINGW64__) -# define off_t _off_t -# define off64_t _off64_t +# if !defined(__MINGW64__) +# define off_t cr_off32 +# else +# define off_t cr_off64 +# endif +# define off64_t cr_off64 # endif # include <io.h> # if defined(__MINGW32__) || defined(__MINGW64__) From 969f0fed747fb4713a88db7effa10f51128a7a22 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 14 Nov 2015 11:13:43 +0100 Subject: [PATCH 134/211] Extend commit 1617190 on src/compat/posix.h --- src/compat/posix.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/compat/posix.h b/src/compat/posix.h index 4468f63e..c3d94a55 100644 --- a/src/compat/posix.h +++ b/src/compat/posix.h @@ -41,8 +41,18 @@ # define TMP_POSIX # endif # if defined(__MINGW32__) || defined(__MINGW64__) -# define off_t _off_t -# define off64_t _off64_t + +# include <stdint.h> + +typedef int32_t cr_off32 +typedef int64_t cr_off64 + +# if !defined(__MINGW64__) +# define off_t cr_off32 +# else +# define off_t cr_off64 +# endif +# define off64_t cr_off64 # endif # include <stdio.h> # include <string.h> From a76e828dc7ee66114b0974285da4feca2d8a7d8d Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 15 Nov 2015 12:00:49 +0100 Subject: [PATCH 135/211] Fixed typo on MinGW code --- src/compat/internal.h | 4 ++-- src/compat/posix.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compat/internal.h b/src/compat/internal.h index 5a04bdc1..d56f1a08 100644 --- a/src/compat/internal.h +++ b/src/compat/internal.h @@ -33,8 +33,8 @@ # include <stdint.h> -typedef int32_t cr_off32 -typedef int64_t cr_off64 +typedef int32_t cr_off32; +typedef int64_t cr_off64; # if defined(__MINGW32__) || defined(__MINGW64__) # if !defined(__MINGW64__) diff --git a/src/compat/posix.h b/src/compat/posix.h index c3d94a55..b4a35b57 100644 --- a/src/compat/posix.h +++ b/src/compat/posix.h @@ -44,8 +44,8 @@ # include <stdint.h> -typedef int32_t cr_off32 -typedef int64_t cr_off64 +typedef int32_t cr_off32; +typedef int64_t cr_off64; # if !defined(__MINGW64__) # define off_t cr_off32 From 900a1e0a29d7e8e98fd04fa6ee21f838771c4e54 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 15 Nov 2015 19:48:29 +0100 Subject: [PATCH 136/211] Refactored cr_off{32,64} definitions to its own header file to avoid collisions --- src/compat/internal.h | 6 ++---- src/compat/off_t.h | 9 +++++++++ src/compat/posix.h | 5 +---- 3 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 src/compat/off_t.h diff --git a/src/compat/internal.h b/src/compat/internal.h index d56f1a08..47d32cdd 100644 --- a/src/compat/internal.h +++ b/src/compat/internal.h @@ -31,12 +31,10 @@ # define _WIN32_WINNT 0x0502 # include <windows.h> -# include <stdint.h> +# if defined(__MINGW32__) || defined(__MINGW64__) -typedef int32_t cr_off32; -typedef int64_t cr_off64; +# include "off_t.h" -# if defined(__MINGW32__) || defined(__MINGW64__) # if !defined(__MINGW64__) # define off_t cr_off32 # else diff --git a/src/compat/off_t.h b/src/compat/off_t.h new file mode 100644 index 00000000..24dc65d0 --- /dev/null +++ b/src/compat/off_t.h @@ -0,0 +1,9 @@ +#ifndef OFF_T_H_ +# define OFF_T_H_ + +# include <stdint.h> + +typedef int32_t cr_off32; +typedef int64_t cr_off64; + +#endif /* !OFF_T_H_ */ diff --git a/src/compat/posix.h b/src/compat/posix.h index b4a35b57..81af6b31 100644 --- a/src/compat/posix.h +++ b/src/compat/posix.h @@ -42,10 +42,7 @@ # endif # if defined(__MINGW32__) || defined(__MINGW64__) -# include <stdint.h> - -typedef int32_t cr_off32; -typedef int64_t cr_off64; +# include "off_t.h" # if !defined(__MINGW64__) # define off_t cr_off32 From dd557f6f68b40077bcdee9bc3adb0ec348a9e506 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 15 Nov 2015 22:41:17 +0100 Subject: [PATCH 137/211] Added __STRICT_ANSI__ check for off_t definition on MinGW builds --- src/compat/internal.h | 14 ++++++++------ src/compat/off_t.h | 29 ++++++++++++++++++++++++++--- src/compat/posix.h | 14 ++++++++------ 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/compat/internal.h b/src/compat/internal.h index 47d32cdd..d1c342ce 100644 --- a/src/compat/internal.h +++ b/src/compat/internal.h @@ -33,14 +33,16 @@ # if defined(__MINGW32__) || defined(__MINGW64__) -# include "off_t.h" +# if defined(__STRICT_ANSI__) || defined(MINGW_DEFINE_OFF_T) +# include "off_t.h" -# if !defined(__MINGW64__) -# define off_t cr_off32 -# else -# define off_t cr_off64 +# if !defined(__MINGW64__) +# define off_t cr_off32 +# else +# define off_t cr_off64 +# endif +# define off64_t cr_off64 # endif -# define off64_t cr_off64 # endif # include <io.h> # if defined(__MINGW32__) || defined(__MINGW64__) diff --git a/src/compat/off_t.h b/src/compat/off_t.h index 24dc65d0..5918cea5 100644 --- a/src/compat/off_t.h +++ b/src/compat/off_t.h @@ -1,9 +1,32 @@ -#ifndef OFF_T_H_ -# define OFF_T_H_ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef CR_OFF_T_DEFINED +# define CR_OFF_T_DEFINED # include <stdint.h> typedef int32_t cr_off32; typedef int64_t cr_off64; -#endif /* !OFF_T_H_ */ +#endif /* !CR_OFF_T_DEFINED */ diff --git a/src/compat/posix.h b/src/compat/posix.h index 81af6b31..0a7bbda0 100644 --- a/src/compat/posix.h +++ b/src/compat/posix.h @@ -42,14 +42,16 @@ # endif # if defined(__MINGW32__) || defined(__MINGW64__) -# include "off_t.h" +# if defined(__STRICT_ANSI__) || defined(MINGW_DEFINE_OFF_T) +# include "off_t.h" -# if !defined(__MINGW64__) -# define off_t cr_off32 -# else -# define off_t cr_off64 +# if !defined(__MINGW64__) +# define off_t cr_off32 +# else +# define off_t cr_off64 +# endif +# define off64_t cr_off64 # endif -# define off64_t cr_off64 # endif # include <stdio.h> # include <string.h> From e7faf8aaed010f0ddc66539bed3fcf886b3a7c75 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 15 Nov 2015 22:52:25 +0100 Subject: [PATCH 138/211] Removed ansi checks for off_t definition, and added option to define it if needed. --- CMakeLists.txt | 4 ++++ src/compat/internal.h | 19 ++++++++----------- src/compat/posix.h | 19 ++++++++----------- src/config.h.in | 1 + 4 files changed, 21 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4124c0a5..96e093c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,6 +53,10 @@ if (WIN32 AND NOT MSVC) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-no-undefined") endif() +# Compilation options + +option(MINGW_DEFINE_OFF_T "Define off_t and off64_t ourselves before including io.h" OFF) + # Setup coveralls option(COVERALLS "Turn on coveralls support" OFF) diff --git a/src/compat/internal.h b/src/compat/internal.h index d1c342ce..deb41bc0 100644 --- a/src/compat/internal.h +++ b/src/compat/internal.h @@ -31,21 +31,18 @@ # define _WIN32_WINNT 0x0502 # include <windows.h> -# if defined(__MINGW32__) || defined(__MINGW64__) +# if defined(MINGW_DEFINE_OFF_T) && (defined(__MINGW32__) || defined(__MINGW64__)) +# include "off_t.h" -# if defined(__STRICT_ANSI__) || defined(MINGW_DEFINE_OFF_T) -# include "off_t.h" - -# if !defined(__MINGW64__) -# define off_t cr_off32 -# else -# define off_t cr_off64 -# endif -# define off64_t cr_off64 +# if !defined(__MINGW64__) +# define off_t cr_off32 +# else +# define off_t cr_off64 # endif +# define off64_t cr_off64 # endif # include <io.h> -# if defined(__MINGW32__) || defined(__MINGW64__) +# if defined(MINGW_DEFINE_OFF_T) && (defined(__MINGW32__) || defined(__MINGW64__)) # undef off_t # undef off64_t # endif diff --git a/src/compat/posix.h b/src/compat/posix.h index 0a7bbda0..1081942b 100644 --- a/src/compat/posix.h +++ b/src/compat/posix.h @@ -40,22 +40,19 @@ # define _POSIX_SOURCE 1 # define TMP_POSIX # endif -# if defined(__MINGW32__) || defined(__MINGW64__) +# if defined(MINGW_DEFINE_OFF_T) && (defined(__MINGW32__) || defined(__MINGW64__)) +# include "off_t.h" -# if defined(__STRICT_ANSI__) || defined(MINGW_DEFINE_OFF_T) -# include "off_t.h" - -# if !defined(__MINGW64__) -# define off_t cr_off32 -# else -# define off_t cr_off64 -# endif -# define off64_t cr_off64 +# if !defined(__MINGW64__) +# define off_t cr_off32 +# else +# define off_t cr_off64 # endif +# define off64_t cr_off64 # endif # include <stdio.h> # include <string.h> -# if defined(__MINGW32__) || defined(__MINGW64__) +# if defined(MINGW_DEFINE_OFF_T) && defined(__MINGW32__) || defined(__MINGW64__) # undef off_t # undef off64_t # endif diff --git a/src/config.h.in b/src/config.h.in index 6455bff3..43f70588 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -5,6 +5,7 @@ #cmakedefine HAVE_PCRE @HAVE_PCRE@ #cmakedefine ENABLE_VALGRIND_ERRORS @ENABLE_VALGRIND_ERRORS@ #cmakedefine01 HAVE_STRTOK_S +#cmakedefine01 MINGW_DEFINE_OFF_T # define LOCALEDIR "${LOCALEDIR}" # define PACKAGE "${PROJECT_NAME}" From 10e933d7588725ba3c89b8bb26ff3e4b06bda114 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 16 Nov 2015 00:21:30 +0100 Subject: [PATCH 139/211] Fixed pedantic warnings for C99 + POSIX 2008 compatibility --- CMakeLists.txt | 6 +++++- include/criterion/ordered-set.h | 3 +-- src/core/ordered-set.c | 10 +++++----- src/core/report.c | 22 +++++++++++----------- src/core/report.h | 3 ++- src/core/runner.c | 12 ++++++++---- src/core/runner_coroutine.c | 4 ++-- src/core/stats.c | 2 +- src/core/theories.c | 2 +- src/string/extmatch.c | 10 +++++----- 10 files changed, 41 insertions(+), 33 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 96e093c5..3fb7ca7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,7 +41,7 @@ set(GettextTranslate_GMO_BINARY 1) add_definitions(-DCRITERION_BUILDING_DLL=1) if (NOT MSVC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -g -std=gnu99") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -pedantic -pedantic-errors -Wno-format -std=c99") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -g -std=c++11") endif () @@ -53,6 +53,10 @@ if (WIN32 AND NOT MSVC) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-no-undefined") endif() +# Enable standard extensions + +add_definitions(-D_XOPEN_SOURCE=700) + # Compilation options option(MINGW_DEFINE_OFF_T "Define off_t and off64_t ourselves before including io.h" OFF) diff --git a/include/criterion/ordered-set.h b/include/criterion/ordered-set.h index 24044f81..07c5148f 100644 --- a/include/criterion/ordered-set.h +++ b/include/criterion/ordered-set.h @@ -37,7 +37,6 @@ struct criterion_ordered_set { struct criterion_ordered_set_node { struct criterion_ordered_set_node *next; - char data[0]; }; CR_BEGIN_C_API @@ -54,6 +53,6 @@ CR_END_C_API # define FOREACH_SET(Elt, Set) \ for (struct criterion_ordered_set_node *n = Set->first; n; n = n->next) \ for (int cond = 1; cond;) \ - for (Elt = (void*) n->data; cond && (cond = 0, 1);) + for (Elt = (void*) (n + 1); cond && (cond = 0, 1);) #endif /* !CRITERION_ORDERED_SET_H_ */ diff --git a/src/core/ordered-set.c b/src/core/ordered-set.c index fa9c5c5e..c7c6f38c 100644 --- a/src/core/ordered-set.c +++ b/src/core/ordered-set.c @@ -36,7 +36,7 @@ static INLINE void nothing(CR_UNUSED void *ptr, CR_UNUSED void *meta) {} static void destroy_ordered_set_node(void *ptr, void *meta) { struct criterion_ordered_set *set = *(void **) meta; struct criterion_ordered_set_node *n = ptr; - DEF(set->dtor, nothing)(n->data, NULL); + DEF(set->dtor, nothing)(n + 1, NULL); sfree(((struct criterion_ordered_set_node *) ptr)->next); } @@ -58,11 +58,11 @@ void *insert_ordered_set(struct criterion_ordered_set *l, size_t size) { int cmp; struct criterion_ordered_set_node *n, *prev = NULL; - for (n = l->first; n && (cmp = l->cmp(ptr, n->data)) > 0; n = n->next) + for (n = l->first; n && (cmp = l->cmp(ptr, n + 1)) > 0; n = n->next) prev = n; if (n && !cmp) // element already exists - return n->data; + return n + 1; struct criterion_ordered_set_node *new = smalloc( .size = sizeof(struct criterion_ordered_set_node) + size, @@ -72,7 +72,7 @@ void *insert_ordered_set(struct criterion_ordered_set *l, if (!new) return NULL; - memcpy(new->data, ptr, size); + memcpy(new + 1, ptr, size); new->next = n; if (prev) { prev->next = new; @@ -81,5 +81,5 @@ void *insert_ordered_set(struct criterion_ordered_set *l, } ++l->size; - return new->data; + return new + 1; } diff --git a/src/core/report.c b/src/core/report.c index 71123192..c91e7807 100644 --- a/src/core/report.c +++ b/src/core/report.c @@ -71,17 +71,17 @@ f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(POST_SUITE)); f_report_hook CR_SECTION_END_(CR_HOOK_SECTION(POST_ALL)); #endif -IMPL_CALL_REPORT_HOOKS(PRE_ALL); -IMPL_CALL_REPORT_HOOKS(PRE_SUITE); -IMPL_CALL_REPORT_HOOKS(PRE_INIT); -IMPL_CALL_REPORT_HOOKS(PRE_TEST); -IMPL_CALL_REPORT_HOOKS(ASSERT); -IMPL_CALL_REPORT_HOOKS(THEORY_FAIL); -IMPL_CALL_REPORT_HOOKS(TEST_CRASH); -IMPL_CALL_REPORT_HOOKS(POST_TEST); -IMPL_CALL_REPORT_HOOKS(POST_FINI); -IMPL_CALL_REPORT_HOOKS(POST_SUITE); -IMPL_CALL_REPORT_HOOKS(POST_ALL); +IMPL_CALL_REPORT_HOOKS(PRE_ALL) +IMPL_CALL_REPORT_HOOKS(PRE_SUITE) +IMPL_CALL_REPORT_HOOKS(PRE_INIT) +IMPL_CALL_REPORT_HOOKS(PRE_TEST) +IMPL_CALL_REPORT_HOOKS(ASSERT) +IMPL_CALL_REPORT_HOOKS(THEORY_FAIL) +IMPL_CALL_REPORT_HOOKS(TEST_CRASH) +IMPL_CALL_REPORT_HOOKS(POST_TEST) +IMPL_CALL_REPORT_HOOKS(POST_FINI) +IMPL_CALL_REPORT_HOOKS(POST_SUITE) +IMPL_CALL_REPORT_HOOKS(POST_ALL) ReportHook(PRE_ALL)(CR_UNUSED struct criterion_test_set *arg) {} ReportHook(PRE_SUITE)(CR_UNUSED struct criterion_suite_set *arg) {} diff --git a/src/core/report.h b/src/core/report.h index aa545ea3..27139741 100644 --- a/src/core/report.h +++ b/src/core/report.h @@ -27,7 +27,8 @@ # include "criterion/hooks.h" # include "criterion/options.h" -# define report(Kind, Data) call_report_hooks_##Kind(Data) +# define report(Kind, Data) report_(Kind, Data) +# define report_(Kind, Data) call_report_hooks_##Kind(Data) # define DECL_CALL_REPORT_HOOKS(Kind) \ CR_DECL_SECTION_LIMITS(f_report_hook, CR_HOOK_SECTION(Kind)); \ diff --git a/src/core/runner.c b/src/core/runner.c index 22a0f911..30d990a7 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -31,6 +31,7 @@ #include "criterion/options.h" #include "criterion/ordered-set.h" #include "criterion/logging.h" +#include "criterion/preprocess.h" #include "compat/time.h" #include "compat/posix.h" #include "compat/processor.h" @@ -84,7 +85,7 @@ CR_IMPL_SECTION_LIMITS(struct criterion_suite*, cr_sts); // This is here to make the test suite & test sections non-empty TestSuite(); -Test(,) {}; +Test(,) {} static INLINE void nothing(void) {} @@ -178,13 +179,16 @@ void run_test_child(struct criterion_test *test, g_wrappers[test->data->lang_](test, suite); } -#define push_event(Kind, ...) \ +#define push_event(...) \ do { \ stat_push_event(ctx->stats, \ ctx->suite_stats, \ ctx->test_stats, \ - &(struct event) { .kind = Kind, __VA_ARGS__ }); \ - report(Kind, ctx->test_stats); \ + &(struct event) { \ + .kind = CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_TAIL(__VA_ARGS__) \ + }); \ + report(CR_VA_HEAD(__VA_ARGS__), ctx->test_stats); \ } while (0) s_pipe_handle *g_worker_pipe; diff --git a/src/core/runner_coroutine.c b/src/core/runner_coroutine.c index 31a271c2..6e557a3d 100644 --- a/src/core/runner_coroutine.c +++ b/src/core/runner_coroutine.c @@ -112,7 +112,7 @@ struct worker *run_next_test(struct criterion_test_set *p_set, ccrReturn(NULL); for (ctx->ns = ctx->set->suites->first; ctx->ns; ctx->ns = ctx->ns->next) { - ctx->suite_set = (void*) ctx->ns->data; + ctx->suite_set = (void*) (ctx->ns + 1); if (!ctx->suite_set->tests) continue; @@ -126,7 +126,7 @@ struct worker *run_next_test(struct criterion_test_set *p_set, stat_push_event(ctx->stats, ctx->suite_stats, NULL, &ev); for (ctx->nt = ctx->suite_set->tests->first; ctx->nt; ctx->nt = ctx->nt->next) { - ctx->test = (void*) ctx->nt->data; + ctx->test = (void*) (ctx->nt + 1); if (ctx->test->data->kind_ == CR_TEST_PARAMETERIZED && ctx->test->data->param_) { diff --git a/src/core/stats.c b/src/core/stats.c index f68e9187..bb10bac9 100644 --- a/src/core/stats.c +++ b/src/core/stats.c @@ -59,7 +59,7 @@ static void nothing(CR_UNUSED s_glob_stats *stats, CR_UNUSED s_suite_stats *sstats, CR_UNUSED s_test_stats *tstats, CR_UNUSED void *data) { -}; +} static void destroy_stats(void *ptr, CR_UNUSED void *meta) { s_glob_stats *stats = ptr; diff --git a/src/core/theories.c b/src/core/theories.c index 28d0d127..d1a027c1 100644 --- a/src/core/theories.c +++ b/src/core/theories.c @@ -91,7 +91,7 @@ void cr_theory_reset(struct criterion_theory_context *ctx) { } void cr_theory_call(struct criterion_theory_context *ctx, void (*fnptr)(void)) { - dcCallVoid(ctx->vm, (DCpointer) fnptr); + dcCallVoid(ctx->vm, (DCpointer) (unsigned long long) fnptr); } static bool contains_word(const char *str, const char *pattern, size_t sz) { diff --git a/src/string/extmatch.c b/src/string/extmatch.c index b838ff94..3af6da9e 100644 --- a/src/string/extmatch.c +++ b/src/string/extmatch.c @@ -134,16 +134,16 @@ static inline void handle_special(struct context *ctx, handler_arg strs[5]) { } # define _ active -Handler(handle_plus, [POSTSUFFIX] = {_, "+"}, [ELSESTR] = {_, "+" }); -Handler(handle_star, [POSTSUFFIX] = {_, "*"}, [ELSESTR] = {_, ".*"}); -Handler(handle_wild, [POSTSUFFIX] = {_, "?"}, [ELSESTR] = {_, "." }); +Handler(handle_plus, [POSTSUFFIX] = {_, "+"}, [ELSESTR] = {_, "+" }) +Handler(handle_star, [POSTSUFFIX] = {_, "*"}, [ELSESTR] = {_, ".*"}) +Handler(handle_wild, [POSTSUFFIX] = {_, "?"}, [ELSESTR] = {_, "." }) Handler(handle_excl, [POSTPREFIX] = {_, "?!"}, [PRESUFFIX] = {is_eos, "$" }, [POSTSUFFIX] = {_, ".*"}, [ELSESTR] = {_, "!" } - ); -Handler(handle_at, [ELSESTR] = {_, "@"}); + ) +Handler(handle_at, [ELSESTR] = {_, "@"}) # undef _ static void handle_rbra(struct context *ctx, CR_UNUSED char c) { From cb02a30576727c222c654e3f87e1b309c006f52d Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 16 Nov 2015 00:33:58 +0100 Subject: [PATCH 140/211] Removed MINGW_DEFINE_OFF_T definition when option is off --- src/config.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.h.in b/src/config.h.in index 43f70588..0040dad9 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -4,8 +4,8 @@ #cmakedefine ENABLE_NLS @ENABLE_NLS@ #cmakedefine HAVE_PCRE @HAVE_PCRE@ #cmakedefine ENABLE_VALGRIND_ERRORS @ENABLE_VALGRIND_ERRORS@ +#cmakedefine MINGW_DEFINE_OFF_T @MINGW_DEFINE_OFF_T@ #cmakedefine01 HAVE_STRTOK_S -#cmakedefine01 MINGW_DEFINE_OFF_T # define LOCALEDIR "${LOCALEDIR}" # define PACKAGE "${PROJECT_NAME}" From 44d9e436fe9498513ca80cbc3c6d16649f2b7d4f Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 16 Nov 2015 00:40:20 +0100 Subject: [PATCH 141/211] Removed pedantic warnings and used GNU C 99 standard --- CMakeLists.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3fb7ca7a..96e093c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,7 +41,7 @@ set(GettextTranslate_GMO_BINARY 1) add_definitions(-DCRITERION_BUILDING_DLL=1) if (NOT MSVC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -pedantic -pedantic-errors -Wno-format -std=c99") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -g -std=gnu99") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -g -std=c++11") endif () @@ -53,10 +53,6 @@ if (WIN32 AND NOT MSVC) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-no-undefined") endif() -# Enable standard extensions - -add_definitions(-D_XOPEN_SOURCE=700) - # Compilation options option(MINGW_DEFINE_OFF_T "Define off_t and off64_t ourselves before including io.h" OFF) From 5388dd03417b730c12c2e288e6236ff774cb0661 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 16 Nov 2015 14:50:00 +0100 Subject: [PATCH 142/211] Removed intermediate function pointer cast to integer in theory function call --- src/core/theories.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/theories.c b/src/core/theories.c index d1a027c1..28d0d127 100644 --- a/src/core/theories.c +++ b/src/core/theories.c @@ -91,7 +91,7 @@ void cr_theory_reset(struct criterion_theory_context *ctx) { } void cr_theory_call(struct criterion_theory_context *ctx, void (*fnptr)(void)) { - dcCallVoid(ctx->vm, (DCpointer) (unsigned long long) fnptr); + dcCallVoid(ctx->vm, (DCpointer) fnptr); } static bool contains_word(const char *str, const char *pattern, size_t sz) { From 5e329559356e63e9731e289b1088b0c19aeb79d9 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 16 Nov 2015 15:13:34 +0100 Subject: [PATCH 143/211] Added cmake 3.4.0 objective C compiler include fix --- .cmake/Modules/CMakeObjectiveCInformation.cmake | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.cmake/Modules/CMakeObjectiveCInformation.cmake b/.cmake/Modules/CMakeObjectiveCInformation.cmake index ba3f47cf..1a49d7c4 100644 --- a/.cmake/Modules/CMakeObjectiveCInformation.cmake +++ b/.cmake/Modules/CMakeObjectiveCInformation.cmake @@ -156,8 +156,13 @@ set(CMAKE_ObjectiveC_IMPLICIT_LINK_LIBRARIES objc) # compile a C file into an object file if(NOT CMAKE_ObjectiveC_COMPILE_OBJECT) - set(CMAKE_ObjectiveC_COMPILE_OBJECT - "<CMAKE_ObjectiveC_COMPILER> <DEFINES> <FLAGS> -o <OBJECT> -c <SOURCE>") + if("${CMAKE_VERSION}" VERSION_GREATER 3.3.2) + set(CMAKE_ObjectiveC_COMPILE_OBJECT + "<CMAKE_ObjectiveC_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>") + else () + set(CMAKE_ObjectiveC_COMPILE_OBJECT + "<CMAKE_ObjectiveC_COMPILER> <DEFINES> <FLAGS> -o <OBJECT> -c <SOURCE>") + endif () endif() if(NOT CMAKE_ObjectiveC_LINK_EXECUTABLE) From d59b810a56b1b390d6b1b9e1fd7b684102210a30 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 16 Nov 2015 16:06:25 +0100 Subject: [PATCH 144/211] Added Foundation framework to link flags on OS X + Clang --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index b95a7843..85127b01 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -161,6 +161,9 @@ endif () if (CMAKE_ObjectiveC_COMPILER_WORKS) set(CMAKE_ObjectiveC_FLAGS "${CMAKE_ObjectiveC_FLAGS} ${CMAKE_C_FLAGS} -fobjc-exceptions") + if ("${CMAKE_ObjectiveC_COMPILER_ID}" STREQUAL "Clang" AND APPLE) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Foundation") + endif () add_definitions(-D_NATIVE_OBJC_EXCEPTIONS) if (NOT WIN32) From 3e0cba01f45ed53b9b8211eeb4243ceee40ecfad Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 16 Nov 2015 16:34:00 +0100 Subject: [PATCH 145/211] Fixed appveyor not displaying the test logs in the event of failure --- appveyor.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 5940648d..22a8ea99 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -60,7 +60,11 @@ before_deploy: test_script: - cmake --build . --target criterion_tests - - ps: try { ctest -j2 } catch { type Testing/Temporary/LastTest.log } + - ps: | + ctest -j2 + if (-not $lastexitcode -eq 0) { + type Testing/Temporary/LastTest.log + } #after_test: # - 'make coveralls' From f0e4f758d20b71ecb88b99c5f06db0a7183eb0c7 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 16 Nov 2015 08:27:23 -0800 Subject: [PATCH 146/211] Fixed regression tests being sensitive to line endings --- samples/tests/run_test.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/tests/run_test.sh b/samples/tests/run_test.sh index 8d81472d..14d386d0 100755 --- a/samples/tests/run_test.sh +++ b/samples/tests/run_test.sh @@ -13,14 +13,14 @@ else sh -c "$bin_dir/$*" > $out_dir/$1.out 2> $out_dir/$1.err fi -dos2unix $out_dir/$1.err $out_dir/$1.out - if [ -f $cmp_dir/$1.out.expected ] && [ "$(md5sum $out_dir/$1.out | cut -d' ' -f1)" != "$(md5sum $cmp_dir/$1.out.expected | cut -d' ' -f1)" ]; then - diff $out_dir/$1.out $cmp_dir/$1.out.expected - exit 255 + if ! diff --strip-trailing-cr $out_dir/$1.out $cmp_dir/$1.out.expected ; then + exit 255 + fi fi if [ -f $cmp_dir/$1.err.expected ] && [ "$(md5sum $out_dir/$1.err | cut -d' ' -f1)" != "$(md5sum $cmp_dir/$1.err.expected | cut -d' ' -f1)" ]; then - diff $out_dir/$1.err $cmp_dir/$1.err.expected - exit 255 + if ! diff --strip-trailing-cr $out_dir/$1.err $cmp_dir/$1.err.expected ; then + exit 255 + fi fi From edc72c95547570f2c0f27cfbe3e4e4368199b582 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 16 Nov 2015 18:15:34 +0100 Subject: [PATCH 147/211] Removed math.h dependency on base assertions --- include/criterion/assert.h | 179 +-------------- include/criterion/assert_base.h | 373 ++++++++++++++++++++++++++++++++ src/core/wrappers/wrap.cc | 2 +- 3 files changed, 375 insertions(+), 179 deletions(-) create mode 100644 include/criterion/assert_base.h diff --git a/include/criterion/assert.h b/include/criterion/assert.h index 444d6a12..41da0aef 100644 --- a/include/criterion/assert.h +++ b/include/criterion/assert.h @@ -24,188 +24,11 @@ #ifndef CRITERION_ASSERT_H_ # define CRITERION_ASSERT_H_ -# include "preprocess.h" -# include "asprintf-compat.h" - # ifdef __cplusplus -# include <cstring> -# include <cstdlib> # include <algorithm> -# else -# include <string.h> -# include <stdlib.h> -# include <stdbool.h> -# endif -# include "designated-initializer-compat.h" -# include "types.h" -# include "stats.h" -# include "hooks.h" -# include "event.h" -# include "abort.h" - -struct criterion_assert_args { - const char *msg; - int sentinel_; - -#ifdef __cplusplus - constexpr criterion_assert_args(const char *msg) : msg(msg), sentinel_(0) {} - constexpr criterion_assert_args(const char *msg, int sentinel_) : msg(msg), sentinel_(sentinel_) {} -#endif -}; - -// Do NOT reorder unless you want to break the ABI -enum criterion_assert_messages { - CRITERION_ASSERT_MSG_FAIL, - CRITERION_ASSERT_MSG_EXPR_FALSE, - CRITERION_ASSERT_MSG_EXPR_AS_STRINGS_FALSE, - CRITERION_ASSERT_MSG_IS_NULL, - CRITERION_ASSERT_MSG_IS_NOT_NULL, - CRITERION_ASSERT_MSG_IS_EMPTY, - CRITERION_ASSERT_MSG_IS_NOT_EMPTY, - CRITERION_ASSERT_MSG_FILE_STR_MATCH, - CRITERION_ASSERT_MSG_FILE_MATCH, - CRITERION_ASSERT_MSG_THROW, - CRITERION_ASSERT_MSG_NO_THROW, - CRITERION_ASSERT_MSG_ANY_THROW, - CRITERION_ASSERT_MSG_NONE_THROW, -}; - -CR_BEGIN_C_API - -CR_API char *cr_translate_assert_msg(int msg_index, ...); - -CR_END_C_API - -# define CR_GET_CONDITION(Condition, ...) Condition -# define CR_GET_CONDITION_STR(Condition, ...) #Condition -# define CR_VA_SKIP(_, ...) __VA_ARGS__ - -# ifdef __cplusplus -# define CR_STDN std:: -# else -# define CR_STDN # endif -# define CR_TRANSLATE_DEF_MSG__(Arg) \ - CR_IDENTITY Arg - -# define CR_TRANSLATE_DEF_MSG_(...) \ - CR_EXPAND(cr_translate_assert_msg( \ - CR_VA_HEAD(__VA_ARGS__), \ - "" CR_TRANSLATE_DEF_MSG__(CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__))) \ - )) - -# define CR_INIT_STATS_(BufSize, MsgVar, ...) CR_EXPAND( \ - do { \ - char *def_msg = CR_EXPAND(CR_TRANSLATE_DEF_MSG_(__VA_ARGS__)); \ - char *formatted_msg = NULL; \ - int msglen = cr_asprintf(&formatted_msg, \ - "" CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))); \ - if (formatted_msg && *formatted_msg) { \ - MsgVar = formatted_msg; \ - CR_STDN free(def_msg); \ - } else { \ - MsgVar = def_msg; \ - msglen = strlen(def_msg); \ - CR_STDN free(formatted_msg); \ - } \ - \ - BufSize = sizeof(struct criterion_assert_stats) \ - + sizeof (size_t) + msglen + 1; \ - \ - char *buf = (char*) CR_STDN malloc(BufSize); \ - stat = (struct criterion_assert_stats*) buf; \ - CR_STDN memset(buf, 0, sizeof (struct criterion_assert_stats)); \ - buf += sizeof (struct criterion_assert_stats); \ - *((size_t*) buf) = msglen + 1; \ - buf += sizeof (size_t); \ - CR_STDN strcpy(buf, MsgVar); \ - CR_STDN free(MsgVar); \ - } while (0)) - -# define CR_FAIL_ABORT_ criterion_abort_test -# define CR_FAIL_CONTINUES_ criterion_continue_test - -# ifdef __GNUC__ -// We disable the format-zero-length warning because we use the validity of -// asprintf(out, "") for empty assertion messages -# pragma GCC diagnostic ignored "-Wformat-zero-length" -# endif - -# define cr_assert_impl(Fail, Condition, ...) \ - do { \ - bool passed = !!(Condition); \ - \ - char *msg = NULL; \ - size_t bufsize; \ - \ - struct criterion_assert_stats *stat; \ - CR_EXPAND(CR_INIT_STATS_(bufsize, msg, CR_VA_TAIL(__VA_ARGS__))); \ - stat->passed = passed; \ - stat->file = __FILE__; \ - stat->line = __LINE__; \ - \ - criterion_send_event(ASSERT, stat, bufsize); \ - CR_STDN free(stat); \ - \ - if (!passed) \ - Fail(); \ - } while (0) - -// Base assertions - -# define cr_fail(Fail, ...) \ - CR_EXPAND(cr_assert_impl( \ - Fail, \ - 0, \ - dummy, \ - CRITERION_ASSERT_MSG_FAIL, \ - (), \ - __VA_ARGS__ \ - )) - -# define cr_assert_fail(...) CR_EXPAND(cr_fail(CR_FAIL_ABORT_, __VA_ARGS__)) -# define cr_expect_fail(...) CR_EXPAND(cr_fail(CR_FAIL_CONTINUES_, __VA_ARGS__)) - -# define cr_assert(...) \ - CR_EXPAND(cr_assert_impl( \ - CR_FAIL_ABORT_, \ - CR_VA_HEAD(__VA_ARGS__), \ - dummy, \ - CRITERION_ASSERT_MSG_EXPR_FALSE, \ - (CR_STR(CR_VA_HEAD(__VA_ARGS__))), \ - CR_VA_TAIL(__VA_ARGS__) \ - )) - -# define cr_expect(...) \ - CR_EXPAND(cr_assert_impl( \ - CR_FAIL_CONTINUES_, \ - CR_VA_HEAD(__VA_ARGS__), \ - dummy, \ - CRITERION_ASSERT_MSG_EXPR_FALSE, \ - (CR_STR(CR_VA_HEAD(__VA_ARGS__))), \ - CR_VA_TAIL(__VA_ARGS__) \ - )) - -# define cr_assert_not(...) \ - CR_EXPAND(cr_assert_impl( \ - CR_FAIL_ABORT_, \ - !(CR_VA_HEAD(__VA_ARGS__)), \ - dummy, \ - CRITERION_ASSERT_MSG_EXPR_FALSE, \ - (CR_STR(!(CR_VA_HEAD(__VA_ARGS__)))), \ - CR_VA_TAIL(__VA_ARGS__) \ - )) - -# define cr_expect_not(...) \ - CR_EXPAND(cr_assert_impl( \ - CR_FAIL_CONTINUES_, \ - !(CR_VA_HEAD(__VA_ARGS__)), \ - dummy, \ - CRITERION_ASSERT_MSG_EXPR_FALSE, \ - (CR_STR(!(CR_VA_HEAD(__VA_ARGS__)))), \ - CR_VA_TAIL(__VA_ARGS__) \ - )) +# include "assert_base.h" // Common binary assertions diff --git a/include/criterion/assert_base.h b/include/criterion/assert_base.h new file mode 100644 index 00000000..3caa62a2 --- /dev/null +++ b/include/criterion/assert_base.h @@ -0,0 +1,373 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef CRITERION_ASSERT_BASE_H_ +# define CRITERION_ASSERT_BASE_H_ + +# include "preprocess.h" +# include "asprintf-compat.h" + +# ifdef __cplusplus +# include <cstring> +# include <cstdlib> +# else +# include <string.h> +# include <stdlib.h> +# include <stdbool.h> +# endif +# include "designated-initializer-compat.h" +# include "types.h" +# include "stats.h" +# include "hooks.h" +# include "event.h" +# include "abort.h" + +struct criterion_assert_args { + const char *msg; + int sentinel_; + +#ifdef __cplusplus + constexpr criterion_assert_args(const char *msg) : msg(msg), sentinel_(0) {} + constexpr criterion_assert_args(const char *msg, int sentinel_) : msg(msg), sentinel_(sentinel_) {} +#endif +}; + +// Do NOT reorder unless you want to break the ABI +enum criterion_assert_messages { + CRITERION_ASSERT_MSG_FAIL, + CRITERION_ASSERT_MSG_EXPR_FALSE, + CRITERION_ASSERT_MSG_EXPR_AS_STRINGS_FALSE, + CRITERION_ASSERT_MSG_IS_NULL, + CRITERION_ASSERT_MSG_IS_NOT_NULL, + CRITERION_ASSERT_MSG_IS_EMPTY, + CRITERION_ASSERT_MSG_IS_NOT_EMPTY, + CRITERION_ASSERT_MSG_FILE_STR_MATCH, + CRITERION_ASSERT_MSG_FILE_MATCH, + CRITERION_ASSERT_MSG_THROW, + CRITERION_ASSERT_MSG_NO_THROW, + CRITERION_ASSERT_MSG_ANY_THROW, + CRITERION_ASSERT_MSG_NONE_THROW, +}; + +CR_BEGIN_C_API + +CR_API char *cr_translate_assert_msg(int msg_index, ...); + +CR_END_C_API + +# define CR_GET_CONDITION(Condition, ...) Condition +# define CR_GET_CONDITION_STR(Condition, ...) #Condition +# define CR_VA_SKIP(_, ...) __VA_ARGS__ + +# ifdef __cplusplus +# define CR_STDN std:: +# else +# define CR_STDN +# endif + +# define CR_TRANSLATE_DEF_MSG__(Arg) \ + CR_IDENTITY Arg + +# define CR_TRANSLATE_DEF_MSG_(...) \ + CR_EXPAND(cr_translate_assert_msg( \ + CR_VA_HEAD(__VA_ARGS__), \ + "" CR_TRANSLATE_DEF_MSG__(CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__))) \ + )) + +# define CR_INIT_STATS_(BufSize, MsgVar, ...) CR_EXPAND( \ + do { \ + char *def_msg = CR_EXPAND(CR_TRANSLATE_DEF_MSG_(__VA_ARGS__)); \ + char *formatted_msg = NULL; \ + int msglen = cr_asprintf(&formatted_msg, \ + "" CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))); \ + if (formatted_msg && *formatted_msg) { \ + MsgVar = formatted_msg; \ + CR_STDN free(def_msg); \ + } else { \ + MsgVar = def_msg; \ + msglen = strlen(def_msg); \ + CR_STDN free(formatted_msg); \ + } \ + \ + BufSize = sizeof(struct criterion_assert_stats) \ + + sizeof (size_t) + msglen + 1; \ + \ + char *buf = (char*) CR_STDN malloc(BufSize); \ + stat = (struct criterion_assert_stats*) buf; \ + CR_STDN memset(buf, 0, sizeof (struct criterion_assert_stats)); \ + buf += sizeof (struct criterion_assert_stats); \ + *((size_t*) buf) = msglen + 1; \ + buf += sizeof (size_t); \ + CR_STDN strcpy(buf, MsgVar); \ + CR_STDN free(MsgVar); \ + } while (0)) + +# define CR_FAIL_ABORT_ criterion_abort_test +# define CR_FAIL_CONTINUES_ criterion_continue_test + +# ifdef __GNUC__ +// We disable the format-zero-length warning because we use the validity of +// asprintf(out, "") for empty assertion messages +# pragma GCC diagnostic ignored "-Wformat-zero-length" +# endif + +# define cr_assert_impl(Fail, Condition, ...) \ + do { \ + bool passed = !!(Condition); \ + \ + char *msg = NULL; \ + size_t bufsize; \ + \ + struct criterion_assert_stats *stat; \ + CR_EXPAND(CR_INIT_STATS_(bufsize, msg, CR_VA_TAIL(__VA_ARGS__))); \ + stat->passed = passed; \ + stat->file = __FILE__; \ + stat->line = __LINE__; \ + \ + criterion_send_event(ASSERT, stat, bufsize); \ + CR_STDN free(stat); \ + \ + if (!passed) \ + Fail(); \ + } while (0) + +// Base assertions + +# define cr_fail(Fail, ...) \ + CR_EXPAND(cr_assert_impl( \ + Fail, \ + 0, \ + dummy, \ + CRITERION_ASSERT_MSG_FAIL, \ + (), \ + __VA_ARGS__ \ + )) + +# define cr_assert_fail(...) CR_EXPAND(cr_fail(CR_FAIL_ABORT_, __VA_ARGS__)) +# define cr_expect_fail(...) CR_EXPAND(cr_fail(CR_FAIL_CONTINUES_, __VA_ARGS__)) + +# define cr_assert(...) \ + CR_EXPAND(cr_assert_impl( \ + CR_FAIL_ABORT_, \ + CR_VA_HEAD(__VA_ARGS__), \ + dummy, \ + CRITERION_ASSERT_MSG_EXPR_FALSE, \ + (CR_STR(CR_VA_HEAD(__VA_ARGS__))), \ + CR_VA_TAIL(__VA_ARGS__) \ + )) + +# define cr_expect(...) \ + CR_EXPAND(cr_assert_impl( \ + CR_FAIL_CONTINUES_, \ + CR_VA_HEAD(__VA_ARGS__), \ + dummy, \ + CRITERION_ASSERT_MSG_EXPR_FALSE, \ + (CR_STR(CR_VA_HEAD(__VA_ARGS__))), \ + CR_VA_TAIL(__VA_ARGS__) \ + )) + +# define cr_assert_not(...) \ + CR_EXPAND(cr_assert_impl( \ + CR_FAIL_ABORT_, \ + !(CR_VA_HEAD(__VA_ARGS__)), \ + dummy, \ + CRITERION_ASSERT_MSG_EXPR_FALSE, \ + (CR_STR(!(CR_VA_HEAD(__VA_ARGS__)))), \ + CR_VA_TAIL(__VA_ARGS__) \ + )) + +# define cr_expect_not(...) \ + CR_EXPAND(cr_assert_impl( \ + CR_FAIL_CONTINUES_, \ + !(CR_VA_HEAD(__VA_ARGS__)), \ + dummy, \ + CRITERION_ASSERT_MSG_EXPR_FALSE, \ + (CR_STR(!(CR_VA_HEAD(__VA_ARGS__)))), \ + CR_VA_TAIL(__VA_ARGS__) \ + )) + +// Common binary assertions + +# define cr_assert_op_(Fail, Op, Actual, Expected, ...) \ + CR_EXPAND(cr_assert_impl( \ + Fail, \ + (Actual) Op (Expected), \ + dummy, \ + CRITERION_ASSERT_MSG_EXPR_FALSE, \ + (CR_STR((Actual) Op (Expected))), \ + __VA_ARGS__ \ + )) + +# define cr_assert_op_va_(Fail, Op, ...) \ + CR_EXPAND(cr_assert_op_( \ + Fail, \ + Op, \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ + CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ + )) + +# define cr_assert_eq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__)) +# define cr_expect_eq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__)) + +# define cr_assert_neq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, !=, __VA_ARGS__)) +# define cr_expect_neq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, !=, __VA_ARGS__)) + +# define cr_assert_lt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, <, __VA_ARGS__)) +# define cr_expect_lt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, <, __VA_ARGS__)) + +# define cr_assert_leq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, <=, __VA_ARGS__)) +# define cr_expect_leq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, <=, __VA_ARGS__)) + +# define cr_assert_gt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, >, __VA_ARGS__)) +# define cr_expect_gt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, >, __VA_ARGS__)) + +# define cr_assert_geq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, >=, __VA_ARGS__)) +# define cr_expect_geq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, >=, __VA_ARGS__)) + +// Common unary assertions + +# define cr_assert_null_op_(Fail, Op, Msg, Value, ...) \ + CR_EXPAND(cr_assert_impl( \ + Fail, \ + (Value) Op NULL, \ + dummy, \ + Msg, \ + (CR_STR(Value)), \ + __VA_ARGS__ \ + )) + +# define cr_assert_null_op_va_(Fail, Op, Msg, ...) \ + CR_EXPAND(cr_assert_null_op_( \ + Fail, \ + Op, \ + Msg, \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_TAIL(__VA_ARGS__) \ + )) + +# define cr_assert_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_ABORT_, ==, CRITERION_ASSERT_MSG_IS_NOT_NULL, __VA_ARGS__)) +# define cr_expect_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_CONTINUES_, ==, CRITERION_ASSERT_MSG_IS_NOT_NULL, __VA_ARGS__)) + +# define cr_assert_not_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_ABORT_, !=, CRITERION_ASSERT_MSG_IS_NULL, __VA_ARGS__)) +# define cr_expect_not_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_CONTINUES_, !=, CRITERION_ASSERT_MSG_IS_NULL, __VA_ARGS__)) + +// Floating-point assertions + +# define cr_assert_float_eq_op_(Actual, Expected, Epsilon) \ + (Expected) - (Actual) <= (Epsilon) && (Actual) - (Expected) <= (Epsilon) + +# define cr_assert_float_neq_op_(Actual, Expected, Epsilon) \ + (Expected) - (Actual) > (Epsilon) || (Actual) - (Expected) > (Epsilon) + +# define cr_assert_float_op_(Fail, Op, Actual, Expected, Epsilon, ...) \ + CR_EXPAND(cr_assert_impl( \ + Fail, \ + Op(Actual, Expected, Epsilon), \ + dummy, \ + CRITERION_ASSERT_MSG_EXPR_FALSE, \ + (CR_STR(Op(Actual, Expected, Epsilon))), \ + __VA_ARGS__ \ + )) + +# define cr_assert_float_op_va_(Fail, Op, ...) \ + CR_EXPAND(cr_assert_float_op_( \ + Fail, \ + Op, \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ + CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \ + CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \ + )) + +# define cr_assert_float_eq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_ABORT_, cr_assert_float_eq_op_, __VA_ARGS__)) +# define cr_expect_float_eq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_CONTINUES_, cr_assert_float_eq_op_, __VA_ARGS__)) + +# define cr_assert_float_neq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_ABORT_, cr_assert_float_neq_op_, __VA_ARGS__)) +# define cr_expect_float_neq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_CONTINUES_, cr_assert_float_neq_op_, __VA_ARGS__)) + +// String assertions + +# define cr_assert_str_op_empty_(Fail, Op, Msg, Value, ...) \ + CR_EXPAND(cr_assert_impl( \ + Fail, \ + (Value)[0] Op '\0', \ + dummy, \ + Msg, \ + (CR_STR(Value)), \ + __VA_ARGS__ \ + )) + +# define cr_assert_str_op_empty_va_(Fail, Op, Msg, ...) \ + CR_EXPAND(cr_assert_str_op_empty_( \ + Fail, \ + Op, \ + Msg, \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_TAIL(__VA_ARGS__) \ + )) + +# define cr_assert_str_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_ABORT_, ==, CRITERION_ASSERT_MSG_IS_NOT_EMPTY, __VA_ARGS__)) +# define cr_expect_str_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_CONTINUES_, ==, CRITERION_ASSERT_MSG_IS_NOT_EMPTY, __VA_ARGS__)) + +# define cr_assert_str_not_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_ABORT_, !=, CRITERION_ASSERT_MSG_IS_EMPTY, __VA_ARGS__)) +# define cr_expect_str_not_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_CONTINUES_, !=, CRITERION_ASSERT_MSG_IS_EMPTY, __VA_ARGS__)) + +# define cr_assert_str_op_(Fail, Op, Actual, Expected, ...) \ + CR_EXPAND(cr_assert_impl( \ + Fail, \ + CR_STDN strcmp((Actual), (Expected)) Op 0, \ + dummy, \ + CRITERION_ASSERT_MSG_EXPR_AS_STRINGS_FALSE, \ + (CR_STR((Actual) Op (Expected))), \ + __VA_ARGS__ \ + )) + +# define cr_assert_str_op_va_(Fail, Op, ...) \ + CR_EXPAND(cr_assert_str_op_( \ + Fail, \ + Op, \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ + CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ + )) + +# define cr_assert_str_eq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__)) +# define cr_expect_str_eq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__)) + +# define cr_assert_str_neq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, !=, __VA_ARGS__)) +# define cr_expect_str_neq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, !=, __VA_ARGS__)) + +# define cr_assert_str_lt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, <, __VA_ARGS__)) +# define cr_expect_str_lt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, <, __VA_ARGS__)) + +# define cr_assert_str_leq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, <=, __VA_ARGS__)) +# define cr_expect_str_leq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, <=, __VA_ARGS__)) + +# define cr_assert_str_gt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, >, __VA_ARGS__)) +# define cr_expect_str_gt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, >, __VA_ARGS__)) + +# define cr_assert_str_geq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, >=, __VA_ARGS__)) +# define cr_expect_str_geq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, >=, __VA_ARGS__)) + +#endif /* !CRITERION_ASSERT_BASE_H_ */ diff --git a/src/core/wrappers/wrap.cc b/src/core/wrappers/wrap.cc index 67eeb93f..cae21933 100644 --- a/src/core/wrappers/wrap.cc +++ b/src/core/wrappers/wrap.cc @@ -22,7 +22,7 @@ * THE SOFTWARE. */ #include <exception> -#include "criterion/assert.h" +#include "criterion/assert_base.h" #include "criterion/event.h" extern "C" { From 62b4f2171b51fc4de2f1b9b10a6d33978755b9cc Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 16 Nov 2015 18:35:16 +0100 Subject: [PATCH 148/211] Fixed failing Appveyor MinGW builds due to '_hypot' not being defined. This is caused by a MinGW bug in math.h. See http://ehc.ac/p/mingw/bugs/2250/ for more information. --- CMakeLists.txt | 3 +++ appveyor.yml | 1 + samples/CMakeLists.txt | 4 ++-- test/CMakeLists.txt | 4 ++-- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 96e093c5..8749ac05 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,9 @@ set(GettextTranslate_GMO_BINARY 1) add_definitions(-DCRITERION_BUILDING_DLL=1) +set(CMAKE_C_FLAGS_DEFAULT "${CMAKE_C_FLAGS}") +set(CMAKE_CXX_FLAGS_DEFAULT "${CMAKE_CXX_FLAGS}") + if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -g -std=gnu99") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -g -std=c++11") diff --git a/appveyor.yml b/appveyor.yml index 22a8ea99..ba0e7da0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -15,6 +15,7 @@ environment: matrix: - COMPILER: mingw GENERATOR: "MSYS Makefiles" + CXXFLAGS: -D__NO_INLINE__ - COMPILER: msvc GENERATOR: "Visual Studio 14 2015" CFLAGS: /MP diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 867cc947..cc3f9ac3 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -1,6 +1,6 @@ if (NOT MSVC) - set(CMAKE_C_FLAGS "-std=c99 -Wall -Wextra -pedantic") - set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra -pedantic") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS_DEFAULT} -std=c99 -Wall -Wextra -pedantic") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEFAULT} -std=c++11 -Wall -Wextra -pedantic") endif () include_directories(../include) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index da638527..4b57f05d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,6 +1,6 @@ if (NOT MSVC) - set(CMAKE_C_FLAGS "-std=gnu99 -Wall -Wextra") - set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS_DEFAULT} -std=gnu99 -Wall -Wextra") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEFAULT} -std=c++11 -Wall -Wextra") endif () include_directories(../include ../src) From 6917eb4bdac01e65a67a85611cde603eec286e04 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 16 Nov 2015 20:41:32 +0100 Subject: [PATCH 149/211] [Issue #74] Added __clang__ checks on assert.h __GNUC__ ifdefs for better source searching --- include/criterion/assert.h | 2 +- include/criterion/assert_base.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/criterion/assert.h b/include/criterion/assert.h index 41da0aef..19593108 100644 --- a/include/criterion/assert.h +++ b/include/criterion/assert.h @@ -224,7 +224,7 @@ // Safe array comparison assertions -# if defined(__GNUC__) || defined(__cplusplus) +# if defined(__GNUC__) || defined(__clang__) || defined(__cplusplus) # ifdef __cplusplus # define CR_ARR_COMPARE_(A, B, Size, Cmp, Result) \ diff --git a/include/criterion/assert_base.h b/include/criterion/assert_base.h index 3caa62a2..e3905188 100644 --- a/include/criterion/assert_base.h +++ b/include/criterion/assert_base.h @@ -125,7 +125,7 @@ CR_END_C_API # define CR_FAIL_ABORT_ criterion_abort_test # define CR_FAIL_CONTINUES_ criterion_continue_test -# ifdef __GNUC__ +# if defined(__GNUC__) || defined(__clang__) // We disable the format-zero-length warning because we use the validity of // asprintf(out, "") for empty assertion messages # pragma GCC diagnostic ignored "-Wformat-zero-length" From 7a6bddd63ccec653d1da7c5137249093309a90b7 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 17 Nov 2015 16:12:16 +0100 Subject: [PATCH 150/211] Removed unimplemented theory functions --- include/criterion/theories.h | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/include/criterion/theories.h b/include/criterion/theories.h index 5a1227e7..1868441d 100644 --- a/include/criterion/theories.h +++ b/include/criterion/theories.h @@ -42,17 +42,6 @@ constexpr size_t criterion_va_num__(const T &...) { CR_BEGIN_C_API -struct criterion_theory_context; - -CR_API struct criterion_theory_context* cr_theory_init(void); -CR_API void cr_theory_push_arg(struct criterion_theory_context *ctx, bool is_float, size_t size, void *ptr); -CR_API void cr_theory_free(struct criterion_theory_context *ctx); -CR_API void cr_theory_abort(void); -CR_API int cr_theory_mark(void); - -CR_API void cr_theory_reset(struct criterion_theory_context *ctx); -CR_API void cr_theory_call(struct criterion_theory_context *ctx, void (*fnptr)(void)); - # define TheoryDataPoints(Category, Name) \ static struct criterion_datapoints CR_IDENTIFIER_(Category, Name, dps)[] From 3eea22fcdae1680849d50112312a936a8757c5be Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 17 Nov 2015 16:14:30 +0100 Subject: [PATCH 151/211] Reverted removal of cr_theory_abort() --- include/criterion/theories.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/criterion/theories.h b/include/criterion/theories.h index 1868441d..3777ef7b 100644 --- a/include/criterion/theories.h +++ b/include/criterion/theories.h @@ -42,6 +42,8 @@ constexpr size_t criterion_va_num__(const T &...) { CR_BEGIN_C_API +CR_API void cr_theory_abort(void); + # define TheoryDataPoints(Category, Name) \ static struct criterion_datapoints CR_IDENTIFIER_(Category, Name, dps)[] From 7fa0b6580b25a8f3623424b2b07663cda51f4ff6 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 17 Nov 2015 16:30:00 +0100 Subject: [PATCH 152/211] Refactored internal headers into its own subdirectory --- CMakeLists.txt | 10 +++++----- dependencies/valgrind/include/valgrind/valgrind.h | 2 +- include/criterion/abort.h | 2 +- include/criterion/alloc.h | 2 +- include/criterion/assert_base.h | 6 +++--- include/criterion/criterion.h | 4 ++-- include/criterion/event.h | 2 +- include/criterion/hooks.h | 2 +- include/criterion/{ => internal}/asprintf-compat.h | 0 include/criterion/{ => internal}/common.h | 0 .../{ => internal}/designated-initializer-compat.h | 0 include/criterion/{ => internal}/ordered-set.h | 2 +- include/criterion/{ => internal}/preprocess.h | 0 include/criterion/logging.h | 4 ++-- include/criterion/redirect.h | 2 +- include/criterion/types.h | 2 +- src/compat/section.h | 2 +- src/compat/time.c | 2 +- src/core/abort.c | 2 +- src/core/ordered-set.c | 4 ++-- src/core/report.c | 2 +- src/core/runner.c | 4 ++-- src/core/stats.c | 2 +- src/entry/main.c | 2 +- src/io/asprintf.c | 2 +- src/io/event.c | 2 +- src/io/json.c | 2 +- src/io/xml.c | 2 +- src/log/normal.c | 2 +- src/string/extmatch.c | 2 +- src/string/i18n.c | 2 +- test/asprintf.c | 2 +- test/ordered-set.c | 2 +- 33 files changed, 39 insertions(+), 39 deletions(-) rename include/criterion/{ => internal}/asprintf-compat.h (100%) rename include/criterion/{ => internal}/common.h (100%) rename include/criterion/{ => internal}/designated-initializer-compat.h (100%) rename include/criterion/{ => internal}/ordered-set.h (98%) rename include/criterion/{ => internal}/preprocess.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index a1800828..3890768d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,23 +192,23 @@ endif () set(INTERFACE_FILES include/criterion/assert.h include/criterion/abort.h - include/criterion/common.h include/criterion/criterion.h include/criterion/event.h include/criterion/hooks.h include/criterion/logging.h include/criterion/types.h include/criterion/options.h - include/criterion/ordered-set.h include/criterion/stats.h include/criterion/theories.h - include/criterion/asprintf-compat.h - include/criterion/designated-initializer-compat.h - include/criterion/preprocess.h include/criterion/alloc.h include/criterion/parameterized.h include/criterion/redirect.h include/criterion/output.h + include/criterion/internal/common.h + include/criterion/internal/ordered-set.h + include/criterion/internal/asprintf-compat.h + include/criterion/internal/designated-initializer-compat.h + include/criterion/internal/preprocess.h ) # Generate the configure file diff --git a/dependencies/valgrind/include/valgrind/valgrind.h b/dependencies/valgrind/include/valgrind/valgrind.h index 9cfb7003..04c73ec8 100644 --- a/dependencies/valgrind/include/valgrind/valgrind.h +++ b/dependencies/valgrind/include/valgrind/valgrind.h @@ -93,7 +93,7 @@ #include <stdarg.h> -#include <criterion/common.h> +#include <criterion/internal/common.h> /* Nb: this file might be included in a file compiled with -ansi. So we can't use C++ style "//" comments nor the "asm" keyword (instead diff --git a/include/criterion/abort.h b/include/criterion/abort.h index 449c0de4..d6a649e6 100644 --- a/include/criterion/abort.h +++ b/include/criterion/abort.h @@ -24,7 +24,7 @@ #ifndef CRITERION_ABORT_H_ # define CRITERION_ABORT_H_ -# include "common.h" +# include "internal/common.h" CR_BEGIN_C_API diff --git a/include/criterion/alloc.h b/include/criterion/alloc.h index eb687946..71d4ca77 100644 --- a/include/criterion/alloc.h +++ b/include/criterion/alloc.h @@ -31,7 +31,7 @@ using std::size_t; # else # include <stddef.h> # endif -# include "common.h" +# include "internal/common.h" CR_BEGIN_C_API diff --git a/include/criterion/assert_base.h b/include/criterion/assert_base.h index e3905188..f5395989 100644 --- a/include/criterion/assert_base.h +++ b/include/criterion/assert_base.h @@ -24,8 +24,8 @@ #ifndef CRITERION_ASSERT_BASE_H_ # define CRITERION_ASSERT_BASE_H_ -# include "preprocess.h" -# include "asprintf-compat.h" +# include "internal/preprocess.h" +# include "internal/asprintf-compat.h" # ifdef __cplusplus # include <cstring> @@ -35,7 +35,7 @@ # include <stdlib.h> # include <stdbool.h> # endif -# include "designated-initializer-compat.h" +# include "internal/designated-initializer-compat.h" # include "types.h" # include "stats.h" # include "hooks.h" diff --git a/include/criterion/criterion.h b/include/criterion/criterion.h index a2f4ae2b..9549223b 100644 --- a/include/criterion/criterion.h +++ b/include/criterion/criterion.h @@ -24,8 +24,8 @@ #ifndef CRITERION_H_ # define CRITERION_H_ -# include "designated-initializer-compat.h" -# include "common.h" +# include "internal/designated-initializer-compat.h" +# include "internal/common.h" # include "types.h" # include "assert.h" # include "alloc.h" diff --git a/include/criterion/event.h b/include/criterion/event.h index 6ccc649d..6d2d3a01 100644 --- a/include/criterion/event.h +++ b/include/criterion/event.h @@ -29,7 +29,7 @@ # else # include <stddef.h> # endif -# include "common.h" +# include "internal/common.h" CR_BEGIN_C_API diff --git a/include/criterion/hooks.h b/include/criterion/hooks.h index 497b0476..5f622b2a 100644 --- a/include/criterion/hooks.h +++ b/include/criterion/hooks.h @@ -24,7 +24,7 @@ #ifndef CRITERION_HOOKS_H_ # define CRITERION_HOOKS_H_ -# include "common.h" +# include "internal/common.h" # include "types.h" typedef enum { diff --git a/include/criterion/asprintf-compat.h b/include/criterion/internal/asprintf-compat.h similarity index 100% rename from include/criterion/asprintf-compat.h rename to include/criterion/internal/asprintf-compat.h diff --git a/include/criterion/common.h b/include/criterion/internal/common.h similarity index 100% rename from include/criterion/common.h rename to include/criterion/internal/common.h diff --git a/include/criterion/designated-initializer-compat.h b/include/criterion/internal/designated-initializer-compat.h similarity index 100% rename from include/criterion/designated-initializer-compat.h rename to include/criterion/internal/designated-initializer-compat.h diff --git a/include/criterion/ordered-set.h b/include/criterion/internal/ordered-set.h similarity index 98% rename from include/criterion/ordered-set.h rename to include/criterion/internal/ordered-set.h index 07c5148f..aa93cc15 100644 --- a/include/criterion/ordered-set.h +++ b/include/criterion/internal/ordered-set.h @@ -24,7 +24,7 @@ #ifndef CRITERION_ORDERED_SET_H_ # define CRITERION_ORDERED_SET_H_ -# include "types.h" +# include "../types.h" typedef int (*f_criterion_cmp)(void *, void *); diff --git a/include/criterion/preprocess.h b/include/criterion/internal/preprocess.h similarity index 100% rename from include/criterion/preprocess.h rename to include/criterion/internal/preprocess.h diff --git a/include/criterion/logging.h b/include/criterion/logging.h index 3fbc27c3..ab78034e 100644 --- a/include/criterion/logging.h +++ b/include/criterion/logging.h @@ -31,8 +31,8 @@ using std::va_list; # include <stdbool.h> # include <stdarg.h> # endif -# include "common.h" -# include "ordered-set.h" +# include "internal/common.h" +# include "internal/ordered-set.h" # include "stats.h" enum criterion_logging_level { diff --git a/include/criterion/redirect.h b/include/criterion/redirect.h index effb9094..c00f42f9 100644 --- a/include/criterion/redirect.h +++ b/include/criterion/redirect.h @@ -24,7 +24,7 @@ #ifndef CRITERION_REDIRECT_H_ # define CRITERION_REDIRECT_H_ -# include "common.h" +# include "internal/common.h" # include "assert.h" # ifdef __cplusplus diff --git a/include/criterion/types.h b/include/criterion/types.h index c2c40a2c..905b6ac0 100644 --- a/include/criterion/types.h +++ b/include/criterion/types.h @@ -33,7 +33,7 @@ using std::size_t; # include <stdbool.h> # include <stddef.h> # endif -# include "common.h" +# include "internal/common.h" enum criterion_language { CR_LANG_C, diff --git a/src/compat/section.h b/src/compat/section.h index 7ff07555..c461ebfb 100644 --- a/src/compat/section.h +++ b/src/compat/section.h @@ -24,7 +24,7 @@ #ifndef SECTION_H_ # define SECTION_H_ -# include "criterion/common.h" +# include "criterion/internal/common.h" # ifdef _WIN32 void *get_win_section_start(const char *section); diff --git a/src/compat/time.c b/src/compat/time.c index f8c8fee7..2254d50c 100644 --- a/src/compat/time.c +++ b/src/compat/time.c @@ -1,7 +1,7 @@ #include <errno.h> #include <inttypes.h> #include <stdlib.h> -#include "criterion/common.h" +#include "criterion/internal/common.h" #include "criterion/options.h" #include "compat/time.h" #include "compat/posix.h" diff --git a/src/core/abort.c b/src/core/abort.c index 0d32188b..3fc35185 100644 --- a/src/core/abort.c +++ b/src/core/abort.c @@ -23,7 +23,7 @@ */ #include <string.h> #include "abort.h" -#include "criterion/asprintf-compat.h" +#include "criterion/internal/asprintf-compat.h" #include "io/event.h" jmp_buf g_pre_test; diff --git a/src/core/ordered-set.c b/src/core/ordered-set.c index c7c6f38c..dde5d3cb 100644 --- a/src/core/ordered-set.c +++ b/src/core/ordered-set.c @@ -22,8 +22,8 @@ * THE SOFTWARE. */ #include <string.h> -#include <criterion/common.h> -#include <criterion/ordered-set.h> +#include <criterion/internal/common.h> +#include <criterion/internal/ordered-set.h> #include <csptr/smalloc.h> #include "common.h" diff --git a/src/core/report.c b/src/core/report.c index c91e7807..f6c2398b 100644 --- a/src/core/report.c +++ b/src/core/report.c @@ -28,7 +28,7 @@ #include "criterion/stats.h" #include "criterion/logging.h" #include "criterion/options.h" -#include "criterion/ordered-set.h" +#include "criterion/internal/ordered-set.h" #include "report.h" #include "config.h" #include "compat/posix.h" diff --git a/src/core/runner.c b/src/core/runner.c index fe20ef5f..38a85fc3 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -29,9 +29,9 @@ #include <valgrind/valgrind.h> #include "criterion/criterion.h" #include "criterion/options.h" -#include "criterion/ordered-set.h" +#include "criterion/internal/ordered-set.h" #include "criterion/logging.h" -#include "criterion/preprocess.h" +#include "criterion/internal/preprocess.h" #include "compat/time.h" #include "compat/posix.h" #include "compat/processor.h" diff --git a/src/core/stats.c b/src/core/stats.c index bb10bac9..f8d46cdb 100644 --- a/src/core/stats.c +++ b/src/core/stats.c @@ -23,7 +23,7 @@ */ #include <string.h> #include <csptr/smalloc.h> -#include "criterion/common.h" +#include "criterion/internal/common.h" #include "stats.h" #include "common.h" diff --git a/src/entry/main.c b/src/entry/main.c index 6e561de7..792ff799 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -28,7 +28,7 @@ #include <csptr/smalloc.h> #include "criterion/criterion.h" #include "criterion/options.h" -#include "criterion/ordered-set.h" +#include "criterion/internal/ordered-set.h" #include "compat/posix.h" #include "compat/strtok.h" #include "core/runner.h" diff --git a/src/io/asprintf.c b/src/io/asprintf.c index c2a4a126..f340b1d0 100644 --- a/src/io/asprintf.c +++ b/src/io/asprintf.c @@ -25,7 +25,7 @@ #include <limits.h> #include <stdlib.h> #include <stdio.h> -#include "criterion/asprintf-compat.h" +#include "criterion/internal/asprintf-compat.h" int cr_asprintf(char **strp, const char *fmt, ...) { va_list ap; diff --git a/src/io/event.c b/src/io/event.c index 97204267..8d45c4b9 100644 --- a/src/io/event.c +++ b/src/io/event.c @@ -26,7 +26,7 @@ #include <string.h> #include <csptr/smalloc.h> #include "criterion/stats.h" -#include "criterion/common.h" +#include "criterion/internal/common.h" #include "criterion/hooks.h" #include "criterion/logging.h" #include "core/worker.h" diff --git a/src/io/json.c b/src/io/json.c index a893e57e..ea600731 100644 --- a/src/io/json.c +++ b/src/io/json.c @@ -28,7 +28,7 @@ #include "criterion/stats.h" #include "criterion/logging.h" #include "criterion/options.h" -#include "criterion/ordered-set.h" +#include "criterion/internal/ordered-set.h" #include "compat/posix.h" #include "compat/strtok.h" #include "compat/time.h" diff --git a/src/io/xml.c b/src/io/xml.c index 3bce465f..a2cf30f7 100644 --- a/src/io/xml.c +++ b/src/io/xml.c @@ -28,7 +28,7 @@ #include "criterion/stats.h" #include "criterion/logging.h" #include "criterion/options.h" -#include "criterion/ordered-set.h" +#include "criterion/internal/ordered-set.h" #include "compat/posix.h" #include "compat/strtok.h" #include "compat/time.h" diff --git a/src/log/normal.c b/src/log/normal.c index 9789d27e..f6221e09 100644 --- a/src/log/normal.c +++ b/src/log/normal.c @@ -29,7 +29,7 @@ #include "criterion/stats.h" #include "criterion/logging.h" #include "criterion/options.h" -#include "criterion/ordered-set.h" +#include "criterion/internal/ordered-set.h" #include "compat/posix.h" #include "compat/strtok.h" #include "compat/time.h" diff --git a/src/string/extmatch.c b/src/string/extmatch.c index 3af6da9e..de63088e 100644 --- a/src/string/extmatch.c +++ b/src/string/extmatch.c @@ -27,7 +27,7 @@ #include <setjmp.h> #include <stdio.h> -#include "criterion/common.h" +#include "criterion/internal/common.h" #include "common.h" struct context { diff --git a/src/string/i18n.c b/src/string/i18n.c index ecc2e4de..da55950f 100644 --- a/src/string/i18n.c +++ b/src/string/i18n.c @@ -1,6 +1,6 @@ #include "i18n.h" #include "criterion/assert.h" -#include "criterion/asprintf-compat.h" +#include "criterion/internal/asprintf-compat.h" void init_i18n(void) { #if ENABLE_NLS diff --git a/test/asprintf.c b/test/asprintf.c index 0fa34d92..f709bd0f 100644 --- a/test/asprintf.c +++ b/test/asprintf.c @@ -1,6 +1,6 @@ #include "criterion/criterion.h" #include "criterion/theories.h" -#include "criterion/asprintf-compat.h" +#include "criterion/internal/asprintf-compat.h" #include <stdio.h> diff --git a/test/ordered-set.c b/test/ordered-set.c index 3ecdbf1b..92a4d28d 100644 --- a/test/ordered-set.c +++ b/test/ordered-set.c @@ -1,7 +1,7 @@ #include <csptr/smalloc.h> #include "criterion/criterion.h" -#include "criterion/ordered-set.h" +#include "criterion/internal/ordered-set.h" int compare_gt(void *a, void *b) { int *ia = a, *ib = b; From 9b993abb936e2b86016f4b8cad455af4c95c060d Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 17 Nov 2015 17:33:44 +0100 Subject: [PATCH 153/211] Refactored tests and assertions implementation to internal/ --- CMakeLists.txt | 2 + include/criterion/assert.h | 274 +--------------- include/criterion/criterion.h | 70 +--- .../{assert_base.h => internal/assert.h} | 307 +++++++++++------- include/criterion/internal/test.h | 97 ++++++ include/criterion/theories.h | 2 +- src/core/wrappers/wrap.cc | 10 +- 7 files changed, 318 insertions(+), 444 deletions(-) rename include/criterion/{assert_base.h => internal/assert.h} (57%) create mode 100644 include/criterion/internal/test.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3890768d..75cb3fe2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -204,6 +204,8 @@ set(INTERFACE_FILES include/criterion/parameterized.h include/criterion/redirect.h include/criterion/output.h + include/criterion/internal/assert.h + include/criterion/internal/test.h include/criterion/internal/common.h include/criterion/internal/ordered-set.h include/criterion/internal/asprintf-compat.h diff --git a/include/criterion/assert.h b/include/criterion/assert.h index 19593108..3c692830 100644 --- a/include/criterion/assert.h +++ b/include/criterion/assert.h @@ -28,28 +28,26 @@ # include <algorithm> # endif -# include "assert_base.h" +# include "internal/assert.h" -// Common binary assertions +CR_BEGIN_C_API + +CR_API char *cr_translate_assert_msg(int msg_index, ...); + +CR_END_C_API + +// Base assertions + +# define cr_assert_fail(...) CR_EXPAND(cr_fail(CR_FAIL_ABORT_, __VA_ARGS__)) +# define cr_expect_fail(...) CR_EXPAND(cr_fail(CR_FAIL_CONTINUES_, __VA_ARGS__)) + +# define cr_assert(...) CR_EXPAND(cr_assert_(__VA_ARGS__)) +# define cr_expect(...) CR_EXPAND(cr_expect_(__VA_ARGS__)) -# define cr_assert_op_(Fail, Op, Actual, Expected, ...) \ - CR_EXPAND(cr_assert_impl( \ - Fail, \ - (Actual) Op (Expected), \ - dummy, \ - CRITERION_ASSERT_MSG_EXPR_FALSE, \ - (CR_STR((Actual) Op (Expected))), \ - __VA_ARGS__ \ - )) - -# define cr_assert_op_va_(Fail, Op, ...) \ - CR_EXPAND(cr_assert_op_( \ - Fail, \ - Op, \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ - CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ - )) +# define cr_assert_not(...) CR_EXPAND(cr_assert_not_(__VA_ARGS__)) +# define cr_expect_not(...) CR_EXPAND(cr_expect_not_(__VA_ARGS__)) + +// Common binary assertions # define cr_assert_eq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__)) # define cr_expect_eq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__)) @@ -71,25 +69,6 @@ // Common unary assertions -# define cr_assert_null_op_(Fail, Op, Msg, Value, ...) \ - CR_EXPAND(cr_assert_impl( \ - Fail, \ - (Value) Op NULL, \ - dummy, \ - Msg, \ - (CR_STR(Value)), \ - __VA_ARGS__ \ - )) - -# define cr_assert_null_op_va_(Fail, Op, Msg, ...) \ - CR_EXPAND(cr_assert_null_op_( \ - Fail, \ - Op, \ - Msg, \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_TAIL(__VA_ARGS__) \ - )) - # define cr_assert_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_ABORT_, ==, CRITERION_ASSERT_MSG_IS_NOT_NULL, __VA_ARGS__)) # define cr_expect_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_CONTINUES_, ==, CRITERION_ASSERT_MSG_IS_NOT_NULL, __VA_ARGS__)) @@ -98,32 +77,6 @@ // Floating-point assertions -# define cr_assert_float_eq_op_(Actual, Expected, Epsilon) \ - (Expected) - (Actual) <= (Epsilon) && (Actual) - (Expected) <= (Epsilon) - -# define cr_assert_float_neq_op_(Actual, Expected, Epsilon) \ - (Expected) - (Actual) > (Epsilon) || (Actual) - (Expected) > (Epsilon) - -# define cr_assert_float_op_(Fail, Op, Actual, Expected, Epsilon, ...) \ - CR_EXPAND(cr_assert_impl( \ - Fail, \ - Op(Actual, Expected, Epsilon), \ - dummy, \ - CRITERION_ASSERT_MSG_EXPR_FALSE, \ - (CR_STR(Op(Actual, Expected, Epsilon))), \ - __VA_ARGS__ \ - )) - -# define cr_assert_float_op_va_(Fail, Op, ...) \ - CR_EXPAND(cr_assert_float_op_( \ - Fail, \ - Op, \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ - CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \ - CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \ - )) - # define cr_assert_float_eq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_ABORT_, cr_assert_float_eq_op_, __VA_ARGS__)) # define cr_expect_float_eq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_CONTINUES_, cr_assert_float_eq_op_, __VA_ARGS__)) @@ -132,50 +85,12 @@ // String assertions -# define cr_assert_str_op_empty_(Fail, Op, Msg, Value, ...) \ - CR_EXPAND(cr_assert_impl( \ - Fail, \ - (Value)[0] Op '\0', \ - dummy, \ - Msg, \ - (CR_STR(Value)), \ - __VA_ARGS__ \ - )) - -# define cr_assert_str_op_empty_va_(Fail, Op, Msg, ...) \ - CR_EXPAND(cr_assert_str_op_empty_( \ - Fail, \ - Op, \ - Msg, \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_TAIL(__VA_ARGS__) \ - )) - # define cr_assert_str_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_ABORT_, ==, CRITERION_ASSERT_MSG_IS_NOT_EMPTY, __VA_ARGS__)) # define cr_expect_str_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_CONTINUES_, ==, CRITERION_ASSERT_MSG_IS_NOT_EMPTY, __VA_ARGS__)) # define cr_assert_str_not_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_ABORT_, !=, CRITERION_ASSERT_MSG_IS_EMPTY, __VA_ARGS__)) # define cr_expect_str_not_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_CONTINUES_, !=, CRITERION_ASSERT_MSG_IS_EMPTY, __VA_ARGS__)) -# define cr_assert_str_op_(Fail, Op, Actual, Expected, ...) \ - CR_EXPAND(cr_assert_impl( \ - Fail, \ - CR_STDN strcmp((Actual), (Expected)) Op 0, \ - dummy, \ - CRITERION_ASSERT_MSG_EXPR_AS_STRINGS_FALSE, \ - (CR_STR((Actual) Op (Expected))), \ - __VA_ARGS__ \ - )) - -# define cr_assert_str_op_va_(Fail, Op, ...) \ - CR_EXPAND(cr_assert_str_op_( \ - Fail, \ - Op, \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ - CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ - )) - # define cr_assert_str_eq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__)) # define cr_expect_str_eq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__)) @@ -196,26 +111,6 @@ // Array assertions -# define cr_assert_mem_op_(Fail, Op, Actual, Expected, Size, ...) \ - CR_EXPAND(cr_assert_impl( \ - Fail, \ - CR_STDN memcmp((Actual), (Expected), (Size)) Op 0, \ - dummy, \ - CRITERION_ASSERT_MSG_EXPR_FALSE, \ - (CR_STR((Actual)[0 .. Size] Op (Expected)[0 .. Size])), \ - __VA_ARGS__ \ - )) - -# define cr_assert_mem_op_va_(Fail, Op, ...) \ - CR_EXPAND(cr_assert_mem_op_( \ - Fail, \ - Op, \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ - CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \ - CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \ - )) - # define cr_assert_arr_eq(...) CR_EXPAND(cr_assert_mem_op_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__)) # define cr_expect_arr_eq(...) CR_EXPAND(cr_assert_mem_op_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__)) @@ -226,43 +121,6 @@ # if defined(__GNUC__) || defined(__clang__) || defined(__cplusplus) -# ifdef __cplusplus -# define CR_ARR_COMPARE_(A, B, Size, Cmp, Result) \ - int Result = std::lexicographical_compare((A), (A) + Size, (B), (B) + Size, Cmp) -# else -# define CR_ARR_COMPARE_(A, B, Size, Cmp, Result) \ - __typeof__(&(A)[0]) first = (A); \ - __typeof__(&(B)[0]) second = (B); \ - int Result = 0; \ - size_t i, size; \ - for (i = 0, size = (Size); !Result && i < size; ++i) \ - Result = Cmp(first + i, second + i) -# endif - -# define cr_assert_arr_op_cmp_(Fail, Op, Actual, Expected, Size, Cmp, ...) \ - do { \ - CR_ARR_COMPARE_(Actual, Expected, Size, Cmp, order); \ - CR_EXPAND(cr_assert_impl( \ - Fail, \ - order Op 0, \ - dummy, \ - CRITERION_ASSERT_MSG_EXPR_FALSE, \ - (CR_STR((Actual)[0 .. Size] Op (Expected)[0 .. Size])), \ - __VA_ARGS__ \ - )); \ - } while (0) - -# define cr_assert_arr_op_cmp_va_(Fail, Op, ...) \ - CR_EXPAND(cr_assert_arr_op_cmp_( \ - Fail, \ - Op, \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ - CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \ - CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)))), \ - CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)))) \ - )) - # define cr_assert_arr_eq_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__)) # define cr_expect_arr_eq_cmp(...) CR_EXPAND(cr_assert_arr_op_cmp_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__)) @@ -283,14 +141,6 @@ # else -# define CRITERION_GNUC_WARN__(Msg) \ - _Pragma(#Msg) - -# define CRITERION_GNUC_WARN_(Name) CRITERION_GNUC_WARN__( \ - message \ - "The `" #Name "` macro is only available on GNU C compilers." \ - ) - # define cr_assert_arr_eq_cmp(...) CRITERION_GNUC_WARN_(cr_assert_arr_eq_cmp) CR_NOOP # define cr_expect_arr_eq_cmp(...) CRITERION_GNUC_WARN_(cr_expect_arr_eq_cmp) CR_NOOP @@ -313,103 +163,15 @@ # ifdef __cplusplus -# define cr_assert_throw_abort_(Fail, Msg, MsgArgs, ...) \ - CR_EXPAND(cr_assert_impl( \ - Fail, \ - 0, \ - dummy, \ - Msg, \ - MsgArgs, \ - CR_VA_TAIL(__VA_ARGS__) \ - )) - -# define cr_assert_throw_(Fail, Statement, Exception, ...) \ - try { \ - Statement; \ - } catch (Exception const &) { \ - } catch (...) { \ - CR_EXPAND(cr_assert_throw_abort_( \ - Fail, \ - CRITERION_ASSERT_MSG_NO_THROW, \ - (CR_STR(Statement), CR_STR(Exception)), \ - __VA_ARGS__)); \ - } - -# define cr_assert_throw_va_(...) \ - CR_EXPAND(cr_assert_throw_( \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ - CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \ - dummy, \ - CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \ - )) - # define cr_assert_throw(...) CR_EXPAND(cr_assert_throw_va_(CR_FAIL_ABORT_, __VA_ARGS__)) # define cr_expect_throw(...) CR_EXPAND(cr_assert_throw_va_(CR_FAIL_CONTINUES_, __VA_ARGS__)) -# define cr_assert_no_throw_(Fail, Statement, Exception, ...) \ - try { \ - Statement; \ - } catch (Exception const &) { \ - CR_EXPAND(cr_assert_throw_abort_( \ - Fail, \ - CRITERION_ASSERT_MSG_THROW, \ - (CR_STR(Statement), CR_STR(Exception)), \ - __VA_ARGS__)); \ - } - -# define cr_assert_no_throw_va_(...) \ - CR_EXPAND(cr_assert_no_throw_( \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ - CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \ - dummy, \ - CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \ - )) - # define cr_assert_no_throw(...) CR_EXPAND(cr_assert_no_throw_va_(CR_FAIL_ABORT_, __VA_ARGS__)) # define cr_expect_no_throw(...) CR_EXPAND(cr_assert_no_throw_va_(CR_FAIL_CONTINUES_, __VA_ARGS__)) -# define cr_assert_any_throw_(Fail, Statement, ...) \ - try { \ - Statement; \ - CR_EXPAND(cr_assert_throw_abort_( \ - Fail, \ - CRITERION_ASSERT_MSG_ANY_THROW, \ - (CR_STR(Statement)), \ - __VA_ARGS__)); \ - } catch (...) {} - -# define cr_assert_any_throw_va_(...) \ - CR_EXPAND(cr_assert_any_throw_( \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ - dummy, \ - CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ - )) - # define cr_assert_any_throw(...) CR_EXPAND(cr_assert_any_throw_va_(CR_FAIL_ABORT_, __VA_ARGS__)) # define cr_expect_any_throw(...) CR_EXPAND(cr_assert_any_throw_va_(CR_FAIL_CONTINUES_, __VA_ARGS__)) -# define cr_assert_none_throw_(Fail, Statement, ...) \ - try { \ - Statement; \ - } catch (...) { \ - CR_EXPAND(cr_assert_throw_abort_( \ - Fail, \ - CRITERION_ASSERT_MSG_NONE_THROW, \ - (CR_STR(Statement)), \ - __VA_ARGS__)); \ - } - -# define cr_assert_none_throw_va_(...) \ - CR_EXPAND(cr_assert_none_throw_( \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ - dummy, \ - CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ - )) - # define cr_assert_none_throw(...) CR_EXPAND(cr_assert_none_throw_va_(CR_FAIL_ABORT_, __VA_ARGS__)) # define cr_expect_none_throw(...) CR_EXPAND(cr_assert_none_throw_va_(CR_FAIL_CONTINUES_, __VA_ARGS__)) diff --git a/include/criterion/criterion.h b/include/criterion/criterion.h index 9549223b..c90114e6 100644 --- a/include/criterion/criterion.h +++ b/include/criterion/criterion.h @@ -24,79 +24,15 @@ #ifndef CRITERION_H_ # define CRITERION_H_ -# include "internal/designated-initializer-compat.h" -# include "internal/common.h" # include "types.h" # include "assert.h" # include "alloc.h" -# define CR_IDENTIFIER_(Category, Name, Suffix) \ - Category ## _ ## Name ## _ ## Suffix +# include "internal/test.h" -# ifdef __cplusplus -# ifdef __OBJC__ -# define CR_LANG CR_LANG_OBJCXX -# else -# define CR_LANG CR_LANG_CXX -# endif -# else -# ifdef __OBJC__ -# define CR_LANG CR_LANG_OBJC -# else -# define CR_LANG CR_LANG_C -# endif -# endif +# define Test(...) CR_EXPAND(CR_TEST_BASE(__VA_ARGS__, .sentinel_ = 0)) -# ifdef __cplusplus -# define CR_TEST_PROTOTYPE_(Category, Name) \ - extern "C" void CR_IDENTIFIER_(Category, Name, impl)(void) -# else -# define CR_TEST_PROTOTYPE_(Category, Name) \ - void CR_IDENTIFIER_(Category, Name, impl)(void) -# endif - -# define CR_SUITE_IDENTIFIER_(Name, Suffix) \ - suite_ ## Name ## _ ## Suffix - -# define Test(...) CR_EXPAND(Test_(__VA_ARGS__, .sentinel_ = 0)) -# define Test_(Category, Name, ...) \ - CR_TEST_PROTOTYPE_(Category, Name); \ - struct criterion_test_extra_data CR_IDENTIFIER_(Category, Name, extra) = \ - CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ - .lang_ = CR_LANG, \ - .kind_ = CR_TEST_NORMAL, \ - .param_ = (struct criterion_test_params(*)(void)) NULL, \ - .identifier_ = #Category "/" #Name, \ - .file_ = __FILE__, \ - .line_ = __LINE__, \ - __VA_ARGS__ \ - )); \ - struct criterion_test CR_IDENTIFIER_(Category, Name, meta) = { \ - #Name, \ - #Category, \ - CR_IDENTIFIER_(Category, Name, impl), \ - &CR_IDENTIFIER_(Category, Name, extra) \ - }; \ - CR_SECTION_("cr_tst") \ - struct criterion_test *CR_IDENTIFIER_(Category, Name, ptr) \ - = &CR_IDENTIFIER_(Category, Name, meta) CR_SECTION_SUFFIX_; \ - CR_TEST_PROTOTYPE_(Category, Name) - -# define TestSuite(...) CR_EXPAND(TestSuite_(__VA_ARGS__, .sentinel_ = 0)) -# define TestSuite_(Name, ...) \ - struct criterion_test_extra_data CR_SUITE_IDENTIFIER_(Name, extra) = \ - CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ - .file_ = __FILE__, \ - .line_ = 0, \ - __VA_ARGS__ \ - )); \ - struct criterion_suite CR_SUITE_IDENTIFIER_(Name, meta) = { \ - #Name, \ - &CR_SUITE_IDENTIFIER_(Name, extra), \ - }; \ - CR_SECTION_("cr_sts") \ - struct criterion_suite *CR_SUITE_IDENTIFIER_(Name, ptr) \ - = &CR_SUITE_IDENTIFIER_(Name, meta) CR_SECTION_SUFFIX_ +# define TestSuite(...) CR_EXPAND(CR_SUITE_BASE(__VA_ARGS__, .sentinel_ = 0)) CR_BEGIN_C_API diff --git a/include/criterion/assert_base.h b/include/criterion/internal/assert.h similarity index 57% rename from include/criterion/assert_base.h rename to include/criterion/internal/assert.h index f5395989..9b234172 100644 --- a/include/criterion/assert_base.h +++ b/include/criterion/internal/assert.h @@ -1,31 +1,10 @@ -/* - * The MIT License (MIT) - * - * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#ifndef CRITERION_ASSERT_BASE_H_ -# define CRITERION_ASSERT_BASE_H_ - -# include "internal/preprocess.h" -# include "internal/asprintf-compat.h" +#ifndef CRITERION_INTERNAL_ASSERT_H_ +# define CRITERION_INTERNAL_ASSERT_H_ + +# include "common.h" +# include "preprocess.h" +# include "asprintf-compat.h" +# include "designated-initializer-compat.h" # ifdef __cplusplus # include <cstring> @@ -35,12 +14,11 @@ # include <stdlib.h> # include <stdbool.h> # endif -# include "internal/designated-initializer-compat.h" -# include "types.h" -# include "stats.h" -# include "hooks.h" -# include "event.h" -# include "abort.h" +# include "../types.h" +# include "../stats.h" +# include "../hooks.h" +# include "../event.h" +# include "../abort.h" struct criterion_assert_args { const char *msg; @@ -69,12 +47,6 @@ enum criterion_assert_messages { CRITERION_ASSERT_MSG_NONE_THROW, }; -CR_BEGIN_C_API - -CR_API char *cr_translate_assert_msg(int msg_index, ...); - -CR_END_C_API - # define CR_GET_CONDITION(Condition, ...) Condition # define CR_GET_CONDITION_STR(Condition, ...) #Condition # define CR_VA_SKIP(_, ...) __VA_ARGS__ @@ -151,8 +123,6 @@ CR_END_C_API Fail(); \ } while (0) -// Base assertions - # define cr_fail(Fail, ...) \ CR_EXPAND(cr_assert_impl( \ Fail, \ @@ -163,10 +133,7 @@ CR_END_C_API __VA_ARGS__ \ )) -# define cr_assert_fail(...) CR_EXPAND(cr_fail(CR_FAIL_ABORT_, __VA_ARGS__)) -# define cr_expect_fail(...) CR_EXPAND(cr_fail(CR_FAIL_CONTINUES_, __VA_ARGS__)) - -# define cr_assert(...) \ +# define cr_assert_(...) \ CR_EXPAND(cr_assert_impl( \ CR_FAIL_ABORT_, \ CR_VA_HEAD(__VA_ARGS__), \ @@ -176,7 +143,7 @@ CR_END_C_API CR_VA_TAIL(__VA_ARGS__) \ )) -# define cr_expect(...) \ +# define cr_expect_(...) \ CR_EXPAND(cr_assert_impl( \ CR_FAIL_CONTINUES_, \ CR_VA_HEAD(__VA_ARGS__), \ @@ -186,27 +153,28 @@ CR_END_C_API CR_VA_TAIL(__VA_ARGS__) \ )) -# define cr_assert_not(...) \ - CR_EXPAND(cr_assert_impl( \ - CR_FAIL_ABORT_, \ - !(CR_VA_HEAD(__VA_ARGS__)), \ - dummy, \ - CRITERION_ASSERT_MSG_EXPR_FALSE, \ - (CR_STR(!(CR_VA_HEAD(__VA_ARGS__)))), \ - CR_VA_TAIL(__VA_ARGS__) \ +# define cr_assert_not_(...) \ + CR_EXPAND(cr_assert_impl( \ + CR_FAIL_ABORT_, \ + !(CR_VA_HEAD(__VA_ARGS__)), \ + dummy, \ + CRITERION_ASSERT_MSG_EXPR_FALSE, \ + (CR_STR(!(CR_VA_HEAD(__VA_ARGS__)))), \ + CR_VA_TAIL(__VA_ARGS__) \ )) -# define cr_expect_not(...) \ - CR_EXPAND(cr_assert_impl( \ - CR_FAIL_CONTINUES_, \ - !(CR_VA_HEAD(__VA_ARGS__)), \ - dummy, \ - CRITERION_ASSERT_MSG_EXPR_FALSE, \ - (CR_STR(!(CR_VA_HEAD(__VA_ARGS__)))), \ - CR_VA_TAIL(__VA_ARGS__) \ +# define cr_expect_not_(...) \ + CR_EXPAND(cr_assert_impl( \ + CR_FAIL_CONTINUES_, \ + !(CR_VA_HEAD(__VA_ARGS__)), \ + dummy, \ + CRITERION_ASSERT_MSG_EXPR_FALSE, \ + (CR_STR(!(CR_VA_HEAD(__VA_ARGS__)))), \ + CR_VA_TAIL(__VA_ARGS__) \ )) -// Common binary assertions + +// Binary # define cr_assert_op_(Fail, Op, Actual, Expected, ...) \ CR_EXPAND(cr_assert_impl( \ @@ -227,25 +195,7 @@ CR_END_C_API CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ )) -# define cr_assert_eq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__)) -# define cr_expect_eq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__)) - -# define cr_assert_neq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, !=, __VA_ARGS__)) -# define cr_expect_neq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, !=, __VA_ARGS__)) - -# define cr_assert_lt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, <, __VA_ARGS__)) -# define cr_expect_lt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, <, __VA_ARGS__)) - -# define cr_assert_leq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, <=, __VA_ARGS__)) -# define cr_expect_leq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, <=, __VA_ARGS__)) - -# define cr_assert_gt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, >, __VA_ARGS__)) -# define cr_expect_gt(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, >, __VA_ARGS__)) - -# define cr_assert_geq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_ABORT_, >=, __VA_ARGS__)) -# define cr_expect_geq(...) CR_EXPAND(cr_assert_op_va_(CR_FAIL_CONTINUES_, >=, __VA_ARGS__)) - -// Common unary assertions +// Unary # define cr_assert_null_op_(Fail, Op, Msg, Value, ...) \ CR_EXPAND(cr_assert_impl( \ @@ -266,13 +216,7 @@ CR_END_C_API CR_VA_TAIL(__VA_ARGS__) \ )) -# define cr_assert_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_ABORT_, ==, CRITERION_ASSERT_MSG_IS_NOT_NULL, __VA_ARGS__)) -# define cr_expect_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_CONTINUES_, ==, CRITERION_ASSERT_MSG_IS_NOT_NULL, __VA_ARGS__)) - -# define cr_assert_not_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_ABORT_, !=, CRITERION_ASSERT_MSG_IS_NULL, __VA_ARGS__)) -# define cr_expect_not_null(...) CR_EXPAND(cr_assert_null_op_va_(CR_FAIL_CONTINUES_, !=, CRITERION_ASSERT_MSG_IS_NULL, __VA_ARGS__)) - -// Floating-point assertions +// Floating point # define cr_assert_float_eq_op_(Actual, Expected, Epsilon) \ (Expected) - (Actual) <= (Epsilon) && (Actual) - (Expected) <= (Epsilon) @@ -300,13 +244,7 @@ CR_END_C_API CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \ )) -# define cr_assert_float_eq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_ABORT_, cr_assert_float_eq_op_, __VA_ARGS__)) -# define cr_expect_float_eq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_CONTINUES_, cr_assert_float_eq_op_, __VA_ARGS__)) - -# define cr_assert_float_neq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_ABORT_, cr_assert_float_neq_op_, __VA_ARGS__)) -# define cr_expect_float_neq(...) CR_EXPAND(cr_assert_float_op_va_(CR_FAIL_CONTINUES_, cr_assert_float_neq_op_, __VA_ARGS__)) - -// String assertions +// String # define cr_assert_str_op_empty_(Fail, Op, Msg, Value, ...) \ CR_EXPAND(cr_assert_impl( \ @@ -327,12 +265,6 @@ CR_END_C_API CR_VA_TAIL(__VA_ARGS__) \ )) -# define cr_assert_str_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_ABORT_, ==, CRITERION_ASSERT_MSG_IS_NOT_EMPTY, __VA_ARGS__)) -# define cr_expect_str_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_CONTINUES_, ==, CRITERION_ASSERT_MSG_IS_NOT_EMPTY, __VA_ARGS__)) - -# define cr_assert_str_not_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_ABORT_, !=, CRITERION_ASSERT_MSG_IS_EMPTY, __VA_ARGS__)) -# define cr_expect_str_not_empty(...) CR_EXPAND(cr_assert_str_op_empty_va_(CR_FAIL_CONTINUES_, !=, CRITERION_ASSERT_MSG_IS_EMPTY, __VA_ARGS__)) - # define cr_assert_str_op_(Fail, Op, Actual, Expected, ...) \ CR_EXPAND(cr_assert_impl( \ Fail, \ @@ -352,22 +284,165 @@ CR_END_C_API CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ )) -# define cr_assert_str_eq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, ==, __VA_ARGS__)) -# define cr_expect_str_eq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, ==, __VA_ARGS__)) +// Array + +# define cr_assert_mem_op_(Fail, Op, Actual, Expected, Size, ...) \ + CR_EXPAND(cr_assert_impl( \ + Fail, \ + CR_STDN memcmp((Actual), (Expected), (Size)) Op 0, \ + dummy, \ + CRITERION_ASSERT_MSG_EXPR_FALSE, \ + (CR_STR((Actual)[0 .. Size] Op (Expected)[0 .. Size])), \ + __VA_ARGS__ \ + )) + +# define cr_assert_mem_op_va_(Fail, Op, ...) \ + CR_EXPAND(cr_assert_mem_op_( \ + Fail, \ + Op, \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ + CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \ + CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \ + )) -# define cr_assert_str_neq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, !=, __VA_ARGS__)) -# define cr_expect_str_neq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, !=, __VA_ARGS__)) +// Array comparisons + +# ifdef __cplusplus +# define CR_ARR_COMPARE_(A, B, Size, Cmp, Result) \ + int Result = std::lexicographical_compare((A), (A) + Size, (B), (B) + Size, Cmp) +# else +# define CR_ARR_COMPARE_(A, B, Size, Cmp, Result) \ + __typeof__(&(A)[0]) first = (A); \ + __typeof__(&(B)[0]) second = (B); \ + int Result = 0; \ + size_t i, size; \ + for (i = 0, size = (Size); !Result && i < size; ++i) \ + Result = Cmp(first + i, second + i) +# endif + +# define cr_assert_arr_op_cmp_(Fail, Op, Actual, Expected, Size, Cmp, ...) \ + do { \ + CR_ARR_COMPARE_(Actual, Expected, Size, Cmp, order); \ + CR_EXPAND(cr_assert_impl( \ + Fail, \ + order Op 0, \ + dummy, \ + CRITERION_ASSERT_MSG_EXPR_FALSE, \ + (CR_STR((Actual)[0 .. Size] Op (Expected)[0 .. Size])), \ + __VA_ARGS__ \ + )); \ + } while (0) -# define cr_assert_str_lt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, <, __VA_ARGS__)) -# define cr_expect_str_lt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, <, __VA_ARGS__)) +# define cr_assert_arr_op_cmp_va_(Fail, Op, ...) \ + CR_EXPAND(cr_assert_arr_op_cmp_( \ + Fail, \ + Op, \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ + CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \ + CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)))), \ + CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)))) \ + )) + +// Exceptions + +# define cr_assert_throw_abort_(Fail, Msg, MsgArgs, ...) \ + CR_EXPAND(cr_assert_impl( \ + Fail, \ + 0, \ + dummy, \ + Msg, \ + MsgArgs, \ + CR_VA_TAIL(__VA_ARGS__) \ + )) + +# define cr_assert_throw_(Fail, Statement, Exception, ...) \ + try { \ + Statement; \ + } catch (Exception const &) { \ + } catch (...) { \ + CR_EXPAND(cr_assert_throw_abort_( \ + Fail, \ + CRITERION_ASSERT_MSG_NO_THROW, \ + (CR_STR(Statement), CR_STR(Exception)), \ + __VA_ARGS__)); \ + } + +# define cr_assert_throw_va_(...) \ + CR_EXPAND(cr_assert_throw_( \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ + CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \ + dummy, \ + CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \ + )) + +# define cr_assert_no_throw_(Fail, Statement, Exception, ...) \ + try { \ + Statement; \ + } catch (Exception const &) { \ + CR_EXPAND(cr_assert_throw_abort_( \ + Fail, \ + CRITERION_ASSERT_MSG_THROW, \ + (CR_STR(Statement), CR_STR(Exception)), \ + __VA_ARGS__)); \ + } + +# define cr_assert_no_throw_va_(...) \ + CR_EXPAND(cr_assert_no_throw_( \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ + CR_VA_HEAD(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))), \ + dummy, \ + CR_VA_TAIL(CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__))) \ + )) + +# define cr_assert_any_throw_(Fail, Statement, ...) \ + try { \ + Statement; \ + CR_EXPAND(cr_assert_throw_abort_( \ + Fail, \ + CRITERION_ASSERT_MSG_ANY_THROW, \ + (CR_STR(Statement)), \ + __VA_ARGS__)); \ + } catch (...) {} + +# define cr_assert_any_throw_va_(...) \ + CR_EXPAND(cr_assert_any_throw_( \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ + dummy, \ + CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ + )) + +# define cr_assert_none_throw_(Fail, Statement, ...) \ + try { \ + Statement; \ + } catch (...) { \ + CR_EXPAND(cr_assert_throw_abort_( \ + Fail, \ + CRITERION_ASSERT_MSG_NONE_THROW, \ + (CR_STR(Statement)), \ + __VA_ARGS__)); \ + } + +# define cr_assert_none_throw_va_(...) \ + CR_EXPAND(cr_assert_none_throw_( \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ + dummy, \ + CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ + )) -# define cr_assert_str_leq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, <=, __VA_ARGS__)) -# define cr_expect_str_leq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, <=, __VA_ARGS__)) +// Messages -# define cr_assert_str_gt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, >, __VA_ARGS__)) -# define cr_expect_str_gt(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, >, __VA_ARGS__)) +# define CRITERION_GNUC_WARN__(Msg) \ + _Pragma(#Msg) -# define cr_assert_str_geq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_ABORT_, >=, __VA_ARGS__)) -# define cr_expect_str_geq(...) CR_EXPAND(cr_assert_str_op_va_(CR_FAIL_CONTINUES_, >=, __VA_ARGS__)) +# define CRITERION_GNUC_WARN_(Name) CRITERION_GNUC_WARN__( \ + message \ + "The `" #Name "` macro is only available on GNU C compilers." \ + ) -#endif /* !CRITERION_ASSERT_BASE_H_ */ +#endif /* !CRITERION_INTERNAL_ASSERT_H_ */ diff --git a/include/criterion/internal/test.h b/include/criterion/internal/test.h new file mode 100644 index 00000000..2b4e3d95 --- /dev/null +++ b/include/criterion/internal/test.h @@ -0,0 +1,97 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef CRITERION_INTERNAL_TEST_H_ +# define CRITERION_INTERNAL_TEST_H_ + +# include "designated-initializer-compat.h" +# include "common.h" + +# define CR_IDENTIFIER_(Category, Name, Suffix) \ + Category ## _ ## Name ## _ ## Suffix + +# ifdef __cplusplus +# ifdef __OBJC__ +# define CR_LANG CR_LANG_OBJCXX +# else +# define CR_LANG CR_LANG_CXX +# endif +# else +# ifdef __OBJC__ +# define CR_LANG CR_LANG_OBJC +# else +# define CR_LANG CR_LANG_C +# endif +# endif + +# ifdef __cplusplus +# define CR_TEST_PROTOTYPE_(Category, Name) \ + extern "C" void CR_IDENTIFIER_(Category, Name, impl)(void) +# else +# define CR_TEST_PROTOTYPE_(Category, Name) \ + void CR_IDENTIFIER_(Category, Name, impl)(void) +# endif + +# define CR_SUITE_IDENTIFIER_(Name, Suffix) \ + suite_ ## Name ## _ ## Suffix + +# define CR_TEST_BASE(Category, Name, ...) \ + CR_TEST_PROTOTYPE_(Category, Name); \ + struct criterion_test_extra_data CR_IDENTIFIER_(Category, Name, extra) = \ + CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ + .lang_ = CR_LANG, \ + .kind_ = CR_TEST_NORMAL, \ + .param_ = (struct criterion_test_params(*)(void)) NULL, \ + .identifier_ = #Category "/" #Name, \ + .file_ = __FILE__, \ + .line_ = __LINE__, \ + __VA_ARGS__ \ + )); \ + struct criterion_test CR_IDENTIFIER_(Category, Name, meta) = { \ + #Name, \ + #Category, \ + CR_IDENTIFIER_(Category, Name, impl), \ + &CR_IDENTIFIER_(Category, Name, extra) \ + }; \ + CR_SECTION_("cr_tst") \ + struct criterion_test *CR_IDENTIFIER_(Category, Name, ptr) \ + = &CR_IDENTIFIER_(Category, Name, meta) CR_SECTION_SUFFIX_; \ + CR_TEST_PROTOTYPE_(Category, Name) + +# define CR_SUITE_BASE(Name, ...) \ + struct criterion_test_extra_data CR_SUITE_IDENTIFIER_(Name, extra) = \ + CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ + .file_ = __FILE__, \ + .line_ = 0, \ + __VA_ARGS__ \ + )); \ + struct criterion_suite CR_SUITE_IDENTIFIER_(Name, meta) = { \ + #Name, \ + &CR_SUITE_IDENTIFIER_(Name, extra), \ + }; \ + CR_SECTION_("cr_sts") \ + struct criterion_suite *CR_SUITE_IDENTIFIER_(Name, ptr) \ + = &CR_SUITE_IDENTIFIER_(Name, meta) CR_SECTION_SUFFIX_ + + +#endif /* !CRITERION_INTERNAL_TEST_H_ */ diff --git a/include/criterion/theories.h b/include/criterion/theories.h index 3777ef7b..7472760d 100644 --- a/include/criterion/theories.h +++ b/include/criterion/theories.h @@ -122,7 +122,7 @@ CR_API void cr_theory_main(struct criterion_datapoints *dps, size_t datapoints, # define Theory(Args, ...) \ void CR_EXPAND(CR_VAARG_ID(theory, __VA_ARGS__,))Args; \ - CR_EXPAND(Test_(__VA_ARGS__, .sentinel_ = 0)) { \ + CR_EXPAND(CR_TEST_BASE(__VA_ARGS__, .sentinel_ = 0)) { \ cr_theory_main( \ CR_EXPAND(CR_VAARG_ID(dps, __VA_ARGS__,)), \ CR_NB_DATAPOINTS(CR_EXPAND(CR_VAARG_ID(dps, __VA_ARGS__,))), \ diff --git a/src/core/wrappers/wrap.cc b/src/core/wrappers/wrap.cc index e7f716ca..a5bc3eb1 100644 --- a/src/core/wrappers/wrap.cc +++ b/src/core/wrappers/wrap.cc @@ -22,13 +22,13 @@ * THE SOFTWARE. */ #include <exception> -#include "criterion/assert_base.h" #include "criterion/event.h" +#include "core/report.h" + extern "C" { #include "core/abort.h" -#include "core/report.h" #include "core/worker.h" #include "compat/time.h" #include "wrap.h" @@ -36,6 +36,10 @@ extern "C" { static INLINE void nothing(void) {} +void cxx_wrap(struct criterion_test *test, struct criterion_suite *suite); + +} + void cxx_wrap(struct criterion_test *test, struct criterion_suite *suite) { criterion_send_event(PRE_INIT, NULL, 0); @@ -86,5 +90,3 @@ void cxx_wrap(struct criterion_test *test, struct criterion_suite *suite) { criterion_send_event(POST_FINI, NULL, 0); } - -} From bbc5edfb340da3a682ba1ded9de74ac9790b30a6 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 17 Nov 2015 17:49:27 +0100 Subject: [PATCH 154/211] Refactored the implementation of theory macros in internal/ --- include/criterion/internal/theories.h | 71 +++++++++++++++++++++++++++ include/criterion/theories.h | 68 ++++--------------------- 2 files changed, 81 insertions(+), 58 deletions(-) create mode 100644 include/criterion/internal/theories.h diff --git a/include/criterion/internal/theories.h b/include/criterion/internal/theories.h new file mode 100644 index 00000000..a0176c89 --- /dev/null +++ b/include/criterion/internal/theories.h @@ -0,0 +1,71 @@ +#ifndef CRITERION_INTERNAL_THEORIES_H_ +# define CRITERION_INTERNAL_THEORIES_H_ + +# include "test.h" + +# ifdef __cplusplus +# include <cstddef> +using std::size_t; +# else +# include <stddef.h> +# endif + +# ifdef __cplusplus +template <typename... T> +constexpr size_t criterion_va_num__(const T &...) { + return sizeof...(T); +} +# endif + +struct criterion_datapoints { + size_t size; + size_t len; + const char *name; + void *arr; +}; + +CR_BEGIN_C_API + +CR_API void cr_theory_main(struct criterion_datapoints *dps, size_t datapoints, void (*fnptr)(void)); + +CR_END_C_API + +# ifdef __cplusplus +# define CR_TH_VA_NUM(Type, ...) criterion_va_num__(__VA_ARGS__) +# define CR_TH_TEMP_ARRAY(Type, ...) []() { static Type arr[] = { __VA_ARGS__ }; return &arr; }() +# else +# define CR_TH_VA_NUM(Type, ...) sizeof ((Type[]) { __VA_ARGS__ }) / sizeof (Type) +# define CR_TH_TEMP_ARRAY(Type, ...) &(Type[]) { __VA_ARGS__ } +# endif + +# define CR_TH_INTERNAL_TDPS(Category, Name) \ + static struct criterion_datapoints CR_IDENTIFIER_(Category, Name, dps)[] + +# define CR_TH_INTERNAL_TDP(Category, Name) \ + (CR_IDENTIFIER_(Category, Name, dps)) + +# define CR_TH_INTERNAL_DP(Type, ...) { \ + sizeof (Type), \ + CR_EXPAND(CR_TH_VA_NUM(Type, __VA_ARGS__)), \ + #Type, \ + CR_EXPAND(CR_TH_TEMP_ARRAY(Type, __VA_ARGS__)), \ + } + +# define CR_NB_DATAPOINTS(Var) \ + (sizeof (Var) / sizeof (struct criterion_datapoints)) + +# define CR_VAARG_ID(Suffix, Category, Name, ...) \ + CR_IDENTIFIER_(Category, Name, Suffix) + +# define CR_THEORY_BASE(Args, ...) \ + void CR_EXPAND(CR_VAARG_ID(theory, __VA_ARGS__,))Args; \ + CR_EXPAND(CR_TEST_BASE(__VA_ARGS__, .sentinel_ = 0)) { \ + cr_theory_main( \ + CR_EXPAND(CR_VAARG_ID(dps, __VA_ARGS__,)), \ + CR_NB_DATAPOINTS(CR_EXPAND(CR_VAARG_ID(dps, __VA_ARGS__,))), \ + (void(*)(void)) CR_EXPAND(CR_VAARG_ID(theory, __VA_ARGS__,)) \ + ); \ + } \ + void CR_EXPAND(CR_VAARG_ID(theory, __VA_ARGS__,))Args + +#endif /* !CRITERION_INTERNAL_THEORIES_H_ */ diff --git a/include/criterion/theories.h b/include/criterion/theories.h index 7472760d..711e7b16 100644 --- a/include/criterion/theories.h +++ b/include/criterion/theories.h @@ -24,62 +24,30 @@ #ifndef CRITERION_THEORIES_H_ # define CRITERION_THEORIES_H_ -# ifdef __cplusplus -# include <cstddef> -using std::size_t; -# else -# include <stddef.h> -# endif - # include "criterion.h" - -# ifdef __cplusplus -template <typename... T> -constexpr size_t criterion_va_num__(const T &...) { - return sizeof...(T); -} -# endif +# include "internal/theories.h" CR_BEGIN_C_API CR_API void cr_theory_abort(void); -# define TheoryDataPoints(Category, Name) \ - static struct criterion_datapoints CR_IDENTIFIER_(Category, Name, dps)[] +CR_END_C_API -# define TheoryDataPoint(Category, Name) \ - (CR_IDENTIFIER_(Category, Name, dps)) +// Theory and datapoint macros -# ifdef __cplusplus -# define CR_TH_VA_NUM(Type, ...) criterion_va_num__(__VA_ARGS__) -# define CR_TH_TEMP_ARRAY(Type, ...) []() { static Type arr[] = { __VA_ARGS__ }; return &arr; }() -# else -# define CR_TH_VA_NUM(Type, ...) sizeof ((Type[]) { __VA_ARGS__ }) / sizeof (Type) -# define CR_TH_TEMP_ARRAY(Type, ...) &(Type[]) { __VA_ARGS__ } -# endif +# define Theory(Args, ...) CR_EXPAND(CR_THEORY_BASE(Args, __VA_ARGS__)) -# define DataPoints(Type, ...) { \ - sizeof (Type), \ - CR_EXPAND(CR_TH_VA_NUM(Type, __VA_ARGS__)), \ - #Type, \ - CR_EXPAND(CR_TH_TEMP_ARRAY(Type, __VA_ARGS__)), \ - } +# define TheoryDataPoints(Category, Name) CR_TH_INTERNAL_TDPS(Category, Name) +# define TheoryDataPoint(Category, Name) CR_TH_INTERNAL_TDP(Category, Name) +# define DataPoints(Type, ...) CR_EXPAND(CR_TH_INTERNAL_DP(Type, __VA_ARGS__)) -struct criterion_datapoints { - size_t size; - size_t len; - const char *name; - void *arr; -}; - -# define CR_NB_DATAPOINTS(Var) \ - (sizeof (Var) / sizeof (struct criterion_datapoints)) +// Theory invariants # define cr_assume(Condition) \ do { \ if (!(Condition)) \ cr_theory_abort(); \ - } while (0); + } while (0) # define cr_assume_not(Condition) cr_assume(!(Condition)) @@ -115,23 +83,7 @@ struct criterion_datapoints { # define cr_assume_arr_eq(Actual, Expected, Size) cr_assume(!memcmp((A), (B), (Size))) # define cr_assume_arr_neq(Actual, Expected, Size) cr_assume(memcmp((A), (B), (Size))) -CR_API void cr_theory_main(struct criterion_datapoints *dps, size_t datapoints, void (*fnptr)(void)); - -# define CR_VAARG_ID(Suffix, Category, Name, ...) \ - CR_IDENTIFIER_(Category, Name, Suffix) - -# define Theory(Args, ...) \ - void CR_EXPAND(CR_VAARG_ID(theory, __VA_ARGS__,))Args; \ - CR_EXPAND(CR_TEST_BASE(__VA_ARGS__, .sentinel_ = 0)) { \ - cr_theory_main( \ - CR_EXPAND(CR_VAARG_ID(dps, __VA_ARGS__,)), \ - CR_NB_DATAPOINTS(CR_EXPAND(CR_VAARG_ID(dps, __VA_ARGS__,))), \ - (void(*)(void)) CR_EXPAND(CR_VAARG_ID(theory, __VA_ARGS__,)) \ - ); \ - } \ - void CR_EXPAND(CR_VAARG_ID(theory, __VA_ARGS__,))Args - -CR_END_C_API +// Deprecated # ifndef CRITERION_NO_COMPAT # define cr_assume_strings_eq(...) CRITERION_ASSERT_DEPRECATED_B(cr_assume_strings_eq, cr_assume_str_eq) cr_assume_str_eq(__VA_ARGS__) From 586f29128d305689fff68a66583ed9a81ce0e343 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 17 Nov 2015 18:24:44 +0100 Subject: [PATCH 155/211] Refactored the implementation of parameterized tests macros to internal/ --- include/criterion/internal/assert.h | 23 +++++++ include/criterion/internal/parameterized.h | 72 +++++++++++++++++++++ include/criterion/internal/theories.h | 23 +++++++ include/criterion/parameterized.h | 74 ++++++++-------------- 4 files changed, 146 insertions(+), 46 deletions(-) create mode 100644 include/criterion/internal/parameterized.h diff --git a/include/criterion/internal/assert.h b/include/criterion/internal/assert.h index 9b234172..426e3aef 100644 --- a/include/criterion/internal/assert.h +++ b/include/criterion/internal/assert.h @@ -1,3 +1,26 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ #ifndef CRITERION_INTERNAL_ASSERT_H_ # define CRITERION_INTERNAL_ASSERT_H_ diff --git a/include/criterion/internal/parameterized.h b/include/criterion/internal/parameterized.h new file mode 100644 index 00000000..017a5990 --- /dev/null +++ b/include/criterion/internal/parameterized.h @@ -0,0 +1,72 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef CRITERION_INTERNAL_PARAMETERIZED_H_ +# define CRITERION_INTERNAL_PARAMETERIZED_H_ + +# include "test.h" +# include "../types.h" + +# ifdef __cplusplus +# define CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name) \ + extern "C" void CR_IDENTIFIER_(Category, Name, impl)(Param) +# else +# define CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name) \ + void CR_IDENTIFIER_(Category, Name, impl)(Param) +# endif + +# define CR_PARAM_TEST_BASE(Param, Category, Name, ...) \ + CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name); \ + struct criterion_test_extra_data CR_IDENTIFIER_(Category, Name, extra) = \ + CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ + .lang_ = CR_LANG, \ + .kind_ = CR_TEST_PARAMETERIZED, \ + .param_ = CR_IDENTIFIER_(Category, Name, param), \ + .identifier_ = #Category "/" #Name, \ + .file_ = __FILE__, \ + .line_ = __LINE__, \ + __VA_ARGS__ \ + )); \ + struct criterion_test CR_IDENTIFIER_(Category, Name, meta) = { \ + #Name, \ + #Category, \ + (void(*)(void)) CR_IDENTIFIER_(Category, Name, impl), \ + &CR_IDENTIFIER_(Category, Name, extra) \ + }; \ + CR_SECTION_("cr_tst") \ + struct criterion_test *CR_IDENTIFIER_(Category, Name, ptr) \ + = &CR_IDENTIFIER_(Category, Name, meta) CR_SECTION_SUFFIX_; \ + CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name) + +# define CR_PARAM_TEST_PARAMS(Category, Name) \ + static struct criterion_test_params CR_IDENTIFIER_(Category, Name, param)(void) + +# ifdef __cplusplus +# define cr_make_param_array(Type, Array, ...) \ + criterion_test_params(sizeof (Type), (Array), __VA_ARGS__) +# else +# define cr_make_param_array(Type, Array, ...) \ + (struct criterion_test_params) { .size = sizeof (Type), (void*)(Array), __VA_ARGS__ } +# endif + +#endif /* !CRITERION_INTERNAL_PARAMETERIZED_H_ */ diff --git a/include/criterion/internal/theories.h b/include/criterion/internal/theories.h index a0176c89..172d96df 100644 --- a/include/criterion/internal/theories.h +++ b/include/criterion/internal/theories.h @@ -1,3 +1,26 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ #ifndef CRITERION_INTERNAL_THEORIES_H_ # define CRITERION_INTERNAL_THEORIES_H_ diff --git a/include/criterion/parameterized.h b/include/criterion/parameterized.h index 2c6d96ca..7099009a 100644 --- a/include/criterion/parameterized.h +++ b/include/criterion/parameterized.h @@ -1,58 +1,40 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ #ifndef CRITERION_PARAMETERIZED_H_ # define CRITERION_PARAMETERIZED_H_ -# include "criterion.h" # include "alloc.h" -# ifdef __cplusplus -# include <vector> -# endif - -# ifdef __cplusplus -# define CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name) \ - extern "C" void CR_IDENTIFIER_(Category, Name, impl)(Param) -# else -# define CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name) \ - void CR_IDENTIFIER_(Category, Name, impl)(Param) -# endif - -# define ParameterizedTest(...) \ - CR_EXPAND(ParameterizedTest_(__VA_ARGS__, .sentinel_ = 0)) +# include "assert.h" +# include "internal/parameterized.h" -# define ParameterizedTest_(Param, Category, Name, ...) \ - CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name); \ - struct criterion_test_extra_data CR_IDENTIFIER_(Category, Name, extra) = \ - CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ - .lang_ = CR_LANG, \ - .kind_ = CR_TEST_PARAMETERIZED, \ - .param_ = CR_IDENTIFIER_(Category, Name, param), \ - .identifier_ = #Category "/" #Name, \ - .file_ = __FILE__, \ - .line_ = __LINE__, \ - __VA_ARGS__ \ - )); \ - struct criterion_test CR_IDENTIFIER_(Category, Name, meta) = { \ - #Name, \ - #Category, \ - (void(*)(void)) CR_IDENTIFIER_(Category, Name, impl), \ - &CR_IDENTIFIER_(Category, Name, extra) \ - }; \ - CR_SECTION_("cr_tst") \ - struct criterion_test *CR_IDENTIFIER_(Category, Name, ptr) \ - = &CR_IDENTIFIER_(Category, Name, meta) CR_SECTION_SUFFIX_; \ - CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name) +# define ParameterizedTest(...) CR_EXPAND(CR_PARAM_TEST_BASE(__VA_ARGS__, .sentinel_ = 0)) -# define ParameterizedTestParameters(Category, Name) \ - static struct criterion_test_params CR_IDENTIFIER_(Category, Name, param)(void) +# define ParameterizedTestParameters(Category, Name) CR_PARAM_TEST_PARAMS(Category, Name) # ifdef __cplusplus -# define cr_make_param_array(Type, Array, ...) \ - criterion_test_params(sizeof (Type), (Array), __VA_ARGS__) -# else -# define cr_make_param_array(Type, Array, ...) \ - (struct criterion_test_params) { .size = sizeof (Type), (void*)(Array), __VA_ARGS__ } -# endif +# include <vector> -# ifdef __cplusplus namespace criterion { template <typename T> using parameters = std::vector<T, criterion::allocator<T>>; From f656fb4279fb944179dd5b1d11086156c2d87175 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 18 Nov 2015 13:12:51 +0100 Subject: [PATCH 156/211] Added missing header files in cmake install files --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 75cb3fe2..21e630e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -211,6 +211,8 @@ set(INTERFACE_FILES include/criterion/internal/asprintf-compat.h include/criterion/internal/designated-initializer-compat.h include/criterion/internal/preprocess.h + include/criterion/internal/theories.h + include/criterion/internal/parameterized.h ) # Generate the configure file From eb3695902374834dc31bc3ad7eb13d436e9e90da Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 18 Nov 2015 13:20:03 +0100 Subject: [PATCH 157/211] Fixed cmake header file installation flattening include subdirectories --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 21e630e8..8c70e05f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -247,7 +247,11 @@ if (COVERALLS) coveralls_setup("${SOURCE_FILES}" ${COVERALLS_UPLOAD}) endif() -install(FILES ${INTERFACE_FILES} DESTINATION include/criterion) +foreach (F ${INTERFACE_FILES}) + get_filename_component(DEST "${F}" DIRECTORY) + install(FILES "${F}" DESTINATION "${DEST}") +endforeach () + install(TARGETS criterion RUNTIME DESTINATION bin LIBRARY DESTINATION lib From 221df82a12b97ce86a30733da8c695b2783fb575 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 18 Nov 2015 14:00:17 +0100 Subject: [PATCH 158/211] Changed DIRECTORY to PATH in get_filename_component for cmake <2.8.12 compatibility --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c70e05f..fdf73aa7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -248,7 +248,7 @@ if (COVERALLS) endif() foreach (F ${INTERFACE_FILES}) - get_filename_component(DEST "${F}" DIRECTORY) + get_filename_component(DEST "${F}" PATH) install(FILES "${F}" DESTINATION "${DEST}") endforeach () From a7d5ecf69c3df4fbff4c1d83d9c525b33e66bb63 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 18 Nov 2015 16:31:31 +0100 Subject: [PATCH 159/211] Refactored redirections and hooks --- .gitignore | 1 + CMakeLists.txt | 5 + include/criterion/hooks.h | 56 +--- include/criterion/internal/hooks.h | 84 ++++++ include/criterion/internal/redirect.h | 48 ++++ include/criterion/internal/stdio_filebuf.hxx | 138 +++++++++ include/criterion/internal/stream.hxx | 114 ++++++++ include/criterion/redirect.h | 286 +------------------ 8 files changed, 401 insertions(+), 331 deletions(-) create mode 100644 include/criterion/internal/hooks.h create mode 100644 include/criterion/internal/redirect.h create mode 100644 include/criterion/internal/stdio_filebuf.hxx create mode 100644 include/criterion/internal/stream.hxx diff --git a/.gitignore b/.gitignore index 94a86952..007b88d8 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ !*.m !*.cc !*.h +!*.hxx !*.rst !*.po !*.in diff --git a/CMakeLists.txt b/CMakeLists.txt index fdf73aa7..6ea2b7ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -213,6 +213,11 @@ set(INTERFACE_FILES include/criterion/internal/preprocess.h include/criterion/internal/theories.h include/criterion/internal/parameterized.h + include/criterion/internal/stdio_filebuf.hxx + include/criterion/internal/stream.hxx + include/criterion/internal/hooks.h + include/criterion/internal/redirect.h + include/criterion/internal/stdio_filebuf.hxx ) # Generate the configure file diff --git a/include/criterion/hooks.h b/include/criterion/hooks.h index 5f622b2a..a7559c60 100644 --- a/include/criterion/hooks.h +++ b/include/criterion/hooks.h @@ -24,8 +24,7 @@ #ifndef CRITERION_HOOKS_H_ # define CRITERION_HOOKS_H_ -# include "internal/common.h" -# include "types.h" +# include "internal/hooks.h" typedef enum { PRE_ALL, @@ -43,57 +42,6 @@ typedef enum { typedef void (*f_report_hook)(); -# define CR_HOOK_IDENTIFIER_(Suffix) CR_HOOK_IDENTIFIER__(__LINE__, Suffix) -# define CR_HOOK_IDENTIFIER__(Line, Suffix) CR_HOOK_IDENTIFIER___(Line, Suffix) -# define CR_HOOK_IDENTIFIER___(Line, Suffix) hook_l ## Line ## _ ## Suffix - -# ifdef __cplusplus -# define CR_HOOK_PROTOTYPE_ \ - extern "C" void CR_HOOK_IDENTIFIER_(impl) -# else -# define CR_HOOK_PROTOTYPE_ \ - void CR_HOOK_IDENTIFIER_(impl) -# endif - -// Section abbreviations -# define CR_HOOK_SECTION_PRE_ALL cr_pra -# define CR_HOOK_SECTION_PRE_SUITE cr_prs -# define CR_HOOK_SECTION_PRE_INIT cr_pri -# define CR_HOOK_SECTION_PRE_TEST cr_prt -# define CR_HOOK_SECTION_ASSERT cr_ast -# define CR_HOOK_SECTION_THEORY_FAIL cr_thf -# define CR_HOOK_SECTION_TEST_CRASH cr_tsc -# define CR_HOOK_SECTION_POST_TEST cr_pot -# define CR_HOOK_SECTION_POST_FINI cr_pof -# define CR_HOOK_SECTION_POST_SUITE cr_pos -# define CR_HOOK_SECTION_POST_ALL cr_poa - -# define CR_HOOK_SECTION(Kind) CR_HOOK_SECTION_ ## Kind - -# define CR_HOOK_SECTION_STRINGIFY__(Sec) #Sec -# define CR_HOOK_SECTION_STRINGIFY_(Sec) CR_HOOK_SECTION_STRINGIFY__(Sec) -# define CR_HOOK_SECTION_STRINGIFY(Kind) CR_HOOK_SECTION_STRINGIFY_(CR_HOOK_SECTION(Kind)) - -# define CR_HOOK_PARAM_TYPE_PRE_ALL struct criterion_test_set * -# define CR_HOOK_PARAM_TYPE_PRE_SUITE struct criterion_suite_set * -# define CR_HOOK_PARAM_TYPE_PRE_INIT struct criterion_test * -# define CR_HOOK_PARAM_TYPE_PRE_TEST struct criterion_test * -# define CR_HOOK_PARAM_TYPE_ASSERT struct criterion_assert_stats * -# define CR_HOOK_PARAM_TYPE_THEORY_FAIL struct criterion_theory_stats * -# define CR_HOOK_PARAM_TYPE_TEST_CRASH struct criterion_test_stats * -# define CR_HOOK_PARAM_TYPE_POST_TEST struct criterion_test_stats * -# define CR_HOOK_PARAM_TYPE_POST_FINI struct criterion_test_stats * -# define CR_HOOK_PARAM_TYPE_POST_SUITE struct criterion_suite_stats * -# define CR_HOOK_PARAM_TYPE_POST_ALL struct criterion_global_stats * - -# define CR_HOOK_PARAM_TYPE(Kind) CR_HOOK_PARAM_TYPE_ ## Kind - -# define ReportHook(Kind) \ - CR_HOOK_PROTOTYPE_(CR_HOOK_PARAM_TYPE(Kind)); \ - CR_SECTION_(CR_HOOK_SECTION_STRINGIFY(Kind)) \ - f_report_hook CR_HOOK_IDENTIFIER_(func) = \ - (f_report_hook) CR_HOOK_IDENTIFIER_(impl) \ - CR_SECTION_SUFFIX_; \ - CR_HOOK_PROTOTYPE_ +# define ReportHook(Kind) CR_REPORT_HOOK_IMPL(Kind) #endif /* !CRITERION_HOOKS_H_ */ diff --git a/include/criterion/internal/hooks.h b/include/criterion/internal/hooks.h new file mode 100644 index 00000000..cf33de53 --- /dev/null +++ b/include/criterion/internal/hooks.h @@ -0,0 +1,84 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef CRITERION_INTERNAL_HOOKS_H_ +# define CRITERION_INTERNAL_HOOKS_H_ + +# include "common.h" +# include "../types.h" + +# define CR_HOOK_IDENTIFIER_(Suffix) CR_HOOK_IDENTIFIER__(__LINE__, Suffix) +# define CR_HOOK_IDENTIFIER__(Line, Suffix) CR_HOOK_IDENTIFIER___(Line, Suffix) +# define CR_HOOK_IDENTIFIER___(Line, Suffix) hook_l ## Line ## _ ## Suffix + +# ifdef __cplusplus +# define CR_HOOK_PROTOTYPE_ \ + extern "C" void CR_HOOK_IDENTIFIER_(impl) +# else +# define CR_HOOK_PROTOTYPE_ \ + void CR_HOOK_IDENTIFIER_(impl) +# endif + +// Section abbreviations +# define CR_HOOK_SECTION_PRE_ALL cr_pra +# define CR_HOOK_SECTION_PRE_SUITE cr_prs +# define CR_HOOK_SECTION_PRE_INIT cr_pri +# define CR_HOOK_SECTION_PRE_TEST cr_prt +# define CR_HOOK_SECTION_ASSERT cr_ast +# define CR_HOOK_SECTION_THEORY_FAIL cr_thf +# define CR_HOOK_SECTION_TEST_CRASH cr_tsc +# define CR_HOOK_SECTION_POST_TEST cr_pot +# define CR_HOOK_SECTION_POST_FINI cr_pof +# define CR_HOOK_SECTION_POST_SUITE cr_pos +# define CR_HOOK_SECTION_POST_ALL cr_poa + +# define CR_HOOK_SECTION(Kind) CR_HOOK_SECTION_ ## Kind + +# define CR_HOOK_SECTION_STRINGIFY__(Sec) #Sec +# define CR_HOOK_SECTION_STRINGIFY_(Sec) CR_HOOK_SECTION_STRINGIFY__(Sec) +# define CR_HOOK_SECTION_STRINGIFY(Kind) CR_HOOK_SECTION_STRINGIFY_(CR_HOOK_SECTION(Kind)) + +# define CR_HOOK_PARAM_TYPE_PRE_ALL struct criterion_test_set * +# define CR_HOOK_PARAM_TYPE_PRE_SUITE struct criterion_suite_set * +# define CR_HOOK_PARAM_TYPE_PRE_INIT struct criterion_test * +# define CR_HOOK_PARAM_TYPE_PRE_TEST struct criterion_test * +# define CR_HOOK_PARAM_TYPE_ASSERT struct criterion_assert_stats * +# define CR_HOOK_PARAM_TYPE_THEORY_FAIL struct criterion_theory_stats * +# define CR_HOOK_PARAM_TYPE_TEST_CRASH struct criterion_test_stats * +# define CR_HOOK_PARAM_TYPE_POST_TEST struct criterion_test_stats * +# define CR_HOOK_PARAM_TYPE_POST_FINI struct criterion_test_stats * +# define CR_HOOK_PARAM_TYPE_POST_SUITE struct criterion_suite_stats * +# define CR_HOOK_PARAM_TYPE_POST_ALL struct criterion_global_stats * + +# define CR_HOOK_PARAM_TYPE(Kind) CR_HOOK_PARAM_TYPE_ ## Kind + +# define CR_REPORT_HOOK_IMPL(Kind) \ + CR_HOOK_PROTOTYPE_(CR_HOOK_PARAM_TYPE(Kind)); \ + CR_SECTION_(CR_HOOK_SECTION_STRINGIFY(Kind)) \ + f_report_hook CR_HOOK_IDENTIFIER_(func) = \ + (f_report_hook) CR_HOOK_IDENTIFIER_(impl) \ + CR_SECTION_SUFFIX_; \ + CR_HOOK_PROTOTYPE_ + + +#endif /* !CRITERION_INTERNAL_HOOKS_H_ */ diff --git a/include/criterion/internal/redirect.h b/include/criterion/internal/redirect.h new file mode 100644 index 00000000..64c003b7 --- /dev/null +++ b/include/criterion/internal/redirect.h @@ -0,0 +1,48 @@ +#ifndef CRITERION_INTERNAL_REDIRECT_H_ +# define CRITERION_INTERNAL_REDIRECT_H_ + +# include "common.h" +# include "assert.h" + +# define cr_assert_redir_op_(Fail, Fun, Op, File, Str, ...) \ + CR_EXPAND(cr_assert_impl( \ + Fail, \ + !(Fun((File), (Str)) Op 0), \ + dummy, \ + CRITERION_ASSERT_MSG_FILE_STR_MATCH, \ + (CR_STR(File), Str), \ + __VA_ARGS__ \ + )) + +# define cr_assert_redir_op_va_(Fail, Fun, Op, ...) \ + CR_EXPAND(cr_assert_redir_op_( \ + Fail, \ + Fun, \ + Op, \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ + CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ + )) + +# define cr_assert_redir_f_op_(Fail, Fun, Op, File, Ref, ...) \ + CR_EXPAND(cr_assert_impl( \ + Fail, \ + !(Fun((File), (Ref)) Op 0), \ + dummy, \ + CRITERION_ASSERT_MSG_FILE_MATCH, \ + (CR_STR(File), CR_STR(Ref)), \ + __VA_ARGS__ \ + )) + +# define cr_assert_redir_f_op_va_(Fail, Fun, Op, ...) \ + CR_EXPAND(cr_assert_redir_op_( \ + Fail, \ + Fun, \ + Op, \ + CR_VA_HEAD(__VA_ARGS__), \ + CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ + CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ + )) + + +#endif /* !CRITERION_INTERNAL_REDIRECT_H_ */ diff --git a/include/criterion/internal/stdio_filebuf.hxx b/include/criterion/internal/stdio_filebuf.hxx new file mode 100644 index 00000000..0cb53d7c --- /dev/null +++ b/include/criterion/internal/stdio_filebuf.hxx @@ -0,0 +1,138 @@ +#ifndef CRITERION_INTERNAL_STDIO_FILEBUF_HXX_ +# define CRITERION_INTERNAL_STDIO_FILEBUF_HXX_ + +# include <fstream> + +namespace criterion { namespace internal { + + template <typename CharT, typename Traits = std::char_traits<CharT>> + class stdio_sync_filebuf : public std::basic_streambuf<CharT, Traits> { + public: + typedef Traits traits; + typedef std::basic_filebuf<CharT, Traits> super; + typedef typename Traits::int_type int_type; + typedef typename Traits::pos_type pos_type; + typedef typename Traits::off_type off_type; + + stdio_sync_filebuf(std::FILE *file) + : file(file) + , lastchar(Traits::eof()) + {} + + stdio_sync_filebuf(stdio_sync_filebuf&& other) = default; + stdio_sync_filebuf& operator=(stdio_sync_filebuf&& other) = default; + + void swap(stdio_sync_filebuf& other) { + super::swap(other); + std::swap(file, other.file); + std::swap(lastchar, other.lastchar); + } + + protected: + int_type syncgetc(); + int_type syncungetc(int_type); + int_type syncputc(int_type); + + virtual std::streampos seekoff(std::streamoff off, + std::ios_base::seekdir dir, + std::ios_base::openmode = std::ios_base::in | std::ios_base::out) { + + int whence; + if (dir == std::ios_base::beg) + whence = SEEK_SET; + else if (dir == std::ios_base::cur) + whence = SEEK_CUR; + else + whence = SEEK_END; + + if (!fseek(file, off, whence)) + return std::streampos(std::ftell(file)); + return std::streamoff(-1); + } + + virtual std::streampos seekpos(std::streampos pos, + std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) { + return seekoff(std::streamoff(pos), std::ios_base::beg, mode); + } + + virtual std::streamsize xsgetn(CharT* s, std::streamsize n); + virtual std::streamsize xsputn(const CharT* s, std::streamsize n); + + virtual int sync() { + return std::fflush(file); + } + + virtual int_type underflow() { + int_type c = syncgetc(); + return syncungetc(c); + } + + virtual int_type uflow() { + return lastchar = syncgetc(); + } + + static inline bool is_eof(int_type c) { + static const int_type eof = Traits::eof(); + return Traits::eq_int_type(c, eof); + } + + virtual int_type overflow(int_type c = Traits::eof()) { + int_type ret; + if (is_eof(c)) { + if (std::fflush(file)) + ret = Traits::eof(); + else + ret = Traits::not_eof(c); + } else { + ret = syncputc(c); + } + return ret; + } + + virtual int_type pbackfail(int_type c = Traits::eof()) { + int_type ret = syncungetc(is_eof(c) && !is_eof(lastchar) ? lastchar : c); + lastchar = Traits::eof(); + return ret; + } + + private: + std::FILE *file; + bool file_open; + int_type lastchar; + }; + + template <> + inline stdio_sync_filebuf<char>::int_type + stdio_sync_filebuf<char>::syncgetc() { + return std::getc(file); + } + + template <> + inline stdio_sync_filebuf<char>::int_type + stdio_sync_filebuf<char>::syncungetc(stdio_sync_filebuf<char>::int_type c) { + return std::ungetc(c, file); + } + + template <> + inline stdio_sync_filebuf<char>::int_type + stdio_sync_filebuf<char>::syncputc(stdio_sync_filebuf<char>::int_type c) { + return std::putc(c, file); + } + + template <> + inline std::streamsize + stdio_sync_filebuf<char>::xsgetn(char *s, std::streamsize n) { + std::streamsize res = std::fread(s, 1, n, file); + lastchar = res > 0 ? traits::to_int_type(s[res - 1]) : traits::eof(); + return res; + } + + template <> + inline std::streamsize + stdio_sync_filebuf<char>::xsputn(const char *s, std::streamsize n) { + return std::fwrite(s, 1, n, file); + } + +}} + +#endif /* !CRITERION_INTERNAL_STDIO_FILEBUF_HXX_ */ diff --git a/include/criterion/internal/stream.hxx b/include/criterion/internal/stream.hxx new file mode 100644 index 00000000..d8c5a087 --- /dev/null +++ b/include/criterion/internal/stream.hxx @@ -0,0 +1,114 @@ +#ifndef CRITERION_INTERNAL_STREAM_HXX_ +# define CRITERION_INTERNAL_STREAM_HXX_ + +# include <fstream> +# include <cstdio> +# include <memory> + +# include "stdio_filebuf.hxx" + +namespace criterion { namespace internal { + + template <typename CharT, typename Super> + class stream_mixin : public Super { +public: + stream_mixin(FILE* f) + : Super() + , fbuf(new stdio_sync_filebuf<CharT>(f)) + , file(f) + { + std::ios::rdbuf(&*fbuf); + } + + stream_mixin(const stream_mixin& other) = delete; + stream_mixin& operator=(const stream_mixin& other) = delete; + + stream_mixin(stream_mixin&& other) : + fbuf(std::move(other.fbuf)), + file(std::move(other.file)) + {} + + stream_mixin& operator=(stream_mixin&& other) { + fbuf = std::move(other.fbuf); + file = std::move(other.file); + } + + void close(void) { + Super::flush(); + Super::close(); + std::fclose(file); + } + + private: + std::shared_ptr<stdio_sync_filebuf<CharT>> fbuf; + std::FILE* file; + }; + + template <typename CharT> + using ofstream_mixin = stream_mixin<CharT, std::basic_ofstream<CharT>>; + + template <typename CharT> + using ifstream_mixin = stream_mixin<CharT, std::basic_ifstream<CharT>>; + + template <typename CharT> + using fstream_mixin = stream_mixin<CharT, std::basic_fstream<CharT>>; + + template <typename CharT> + class basic_ofstream : public ofstream_mixin<CharT> { + public: + basic_ofstream(FILE* f) + : ofstream_mixin<CharT>(f) + {} + + basic_ofstream(basic_ofstream&& other) + : ofstream_mixin<CharT>(std::move(other)) + {} + }; + + template <typename CharT> + class basic_ifstream : public ifstream_mixin<CharT> { + public: + basic_ifstream(FILE* f) + : ifstream_mixin<CharT>(f) + {} + + basic_ifstream(basic_ifstream&& other) + : ifstream_mixin<CharT>(std::move(other)) + {} + }; + + template <typename CharT> + class basic_fstream : public fstream_mixin<CharT> { + public: + basic_fstream(FILE* f) + : fstream_mixin<CharT>(f) + {} + + basic_fstream(basic_fstream&& other) + : fstream_mixin<CharT>(std::move(other)) + {} + }; + + struct get_redirected_out_stream_ { + static inline basic_ofstream<char>& call(std::FILE* f) { + static std::unique_ptr<basic_ofstream<char>> stream; + + if (!stream) + stream.reset(new basic_ofstream<char>(f)); + return *stream; + } + + }; + + struct get_redirected_in_stream_ { + static inline basic_ifstream<char>& call(std::FILE* f) { + static std::unique_ptr<basic_ifstream<char>> stream; + if (!stream) + stream.reset(new basic_ifstream<char>(f)); + return *stream; + } + }; + +}} + +#endif /* !CRITERION_INTERNAL_STREAM_HXX_ */ diff --git a/include/criterion/redirect.h b/include/criterion/redirect.h index c00f42f9..6fd5f588 100644 --- a/include/criterion/redirect.h +++ b/include/criterion/redirect.h @@ -25,12 +25,10 @@ # define CRITERION_REDIRECT_H_ # include "internal/common.h" -# include "assert.h" +# include "internal/redirect.h" # ifdef __cplusplus # include <cstdio> -# include <memory> -# include <fstream> # else # include <stdio.h> # endif @@ -52,46 +50,6 @@ CR_API CR_STDN FILE *cr_mock_file_size(size_t max_size); CR_END_C_API -# define cr_assert_redir_op_(Fail, Fun, Op, File, Str, ...) \ - CR_EXPAND(cr_assert_impl( \ - Fail, \ - !(Fun((File), (Str)) Op 0), \ - dummy, \ - CRITERION_ASSERT_MSG_FILE_STR_MATCH, \ - (CR_STR(File), Str), \ - __VA_ARGS__ \ - )) - -# define cr_assert_redir_op_va_(Fail, Fun, Op, ...) \ - CR_EXPAND(cr_assert_redir_op_( \ - Fail, \ - Fun, \ - Op, \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ - CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ - )) - -# define cr_assert_redir_f_op_(Fail, Fun, Op, File, Ref, ...) \ - CR_EXPAND(cr_assert_impl( \ - Fail, \ - !(Fun((File), (Ref)) Op 0), \ - dummy, \ - CRITERION_ASSERT_MSG_FILE_MATCH, \ - (CR_STR(File), CR_STR(Ref)), \ - __VA_ARGS__ \ - )) - -# define cr_assert_redir_f_op_va_(Fail, Fun, Op, ...) \ - CR_EXPAND(cr_assert_redir_op_( \ - Fail, \ - Fun, \ - Op, \ - CR_VA_HEAD(__VA_ARGS__), \ - CR_VA_HEAD(CR_VA_TAIL(__VA_ARGS__)), \ - CR_VA_TAIL(CR_VA_TAIL(__VA_ARGS__)) \ - )) - # define cr_assert_file_contents_eq_str(...) CR_EXPAND(cr_assert_redir_op_va_(CR_FAIL_ABORT_, cr_file_match_str, ==, __VA_ARGS__)) # define cr_expect_file_contents_eq_str(...) CR_EXPAND(cr_assert_redir_op_va_(CR_FAIL_CONTINUES_, cr_file_match_str, ==, __VA_ARGS__)) @@ -129,250 +87,24 @@ CR_END_C_API # define cr_expect_stderr_neq(...) CR_EXPAND(cr_assert_redir_f_op_va_(CR_FAIL_CONTINUES_, cr_file_match_file, !=, cr_get_redirected_stderr(), __VA_ARGS__)) # ifdef __cplusplus -namespace criterion { - - template <typename CharT, typename Traits = std::char_traits<CharT>> - class stdio_sync_filebuf : public std::basic_streambuf<CharT, Traits> { - public: - typedef Traits traits; - typedef std::basic_filebuf<CharT, Traits> super; - typedef typename Traits::int_type int_type; - typedef typename Traits::pos_type pos_type; - typedef typename Traits::off_type off_type; - - stdio_sync_filebuf(std::FILE *file) - : file(file) - , lastchar(Traits::eof()) - {} - - stdio_sync_filebuf(stdio_sync_filebuf&& other) = default; - stdio_sync_filebuf& operator=(stdio_sync_filebuf&& other) = default; - - void swap(stdio_sync_filebuf& other) { - super::swap(other); - std::swap(file, other.file); - std::swap(lastchar, other.lastchar); - } - - protected: - int_type syncgetc(); - int_type syncungetc(int_type); - int_type syncputc(int_type); - - virtual std::streampos seekoff(std::streamoff off, - std::ios_base::seekdir dir, - std::ios_base::openmode = std::ios_base::in | std::ios_base::out) { - - int whence; - if (dir == std::ios_base::beg) - whence = SEEK_SET; - else if (dir == std::ios_base::cur) - whence = SEEK_CUR; - else - whence = SEEK_END; - - if (!fseek(file, off, whence)) - return std::streampos(std::ftell(file)); - return std::streamoff(-1); - } - - virtual std::streampos seekpos(std::streampos pos, - std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) { - return seekoff(std::streamoff(pos), std::ios_base::beg, mode); - } - - virtual std::streamsize xsgetn(CharT* s, std::streamsize n); - virtual std::streamsize xsputn(const CharT* s, std::streamsize n); - - virtual int sync() { - return std::fflush(file); - } - - virtual int_type underflow() { - int_type c = syncgetc(); - return syncungetc(c); - } - - virtual int_type uflow() { - return lastchar = syncgetc(); - } - - static inline bool is_eof(int_type c) { - static const int_type eof = Traits::eof(); - return Traits::eq_int_type(c, eof); - } - - virtual int_type overflow(int_type c = Traits::eof()) { - int_type ret; - if (is_eof(c)) { - if (std::fflush(file)) - ret = Traits::eof(); - else - ret = Traits::not_eof(c); - } else { - ret = syncputc(c); - } - return ret; - } - - virtual int_type pbackfail(int_type c = Traits::eof()) { - int_type ret = syncungetc(is_eof(c) && !is_eof(lastchar) ? lastchar : c); - lastchar = Traits::eof(); - return ret; - } - - private: - std::FILE *file; - bool file_open; - int_type lastchar; - }; - - template <> - inline stdio_sync_filebuf<char>::int_type - stdio_sync_filebuf<char>::syncgetc() { - return std::getc(file); - } - - template <> - inline stdio_sync_filebuf<char>::int_type - stdio_sync_filebuf<char>::syncungetc(stdio_sync_filebuf<char>::int_type c) { - return std::ungetc(c, file); - } +# include "internal/stream.hxx" - template <> - inline stdio_sync_filebuf<char>::int_type - stdio_sync_filebuf<char>::syncputc(stdio_sync_filebuf<char>::int_type c) { - return std::putc(c, file); - } - - template <> - inline std::streamsize - stdio_sync_filebuf<char>::xsgetn(char *s, std::streamsize n) { - std::streamsize res = std::fread(s, 1, n, file); - lastchar = res > 0 ? traits::to_int_type(s[res - 1]) : traits::eof(); - return res; - } - - template <> - inline std::streamsize - stdio_sync_filebuf<char>::xsputn(const char *s, std::streamsize n) { - return std::fwrite(s, 1, n, file); - } - - template <typename CharT, typename Super> - class stream_mixin : public Super { -public: - stream_mixin(FILE* f) - : Super() - , fbuf(new stdio_sync_filebuf<CharT>(f)) - , file(f) - { - std::ios::rdbuf(&*fbuf); - } - - stream_mixin(const stream_mixin& other) = delete; - stream_mixin& operator=(const stream_mixin& other) = delete; - - stream_mixin(stream_mixin&& other) : - fbuf(std::move(other.fbuf)), - file(std::move(other.file)) - {} - - stream_mixin& operator=(stream_mixin&& other) { - fbuf = std::move(other.fbuf); - file = std::move(other.file); - } - - void close(void) { - Super::flush(); - Super::close(); - std::fclose(file); - } - - private: - std::shared_ptr<stdio_sync_filebuf<CharT>> fbuf; - std::FILE* file; - }; - - template <typename CharT> - using ofstream_mixin = stream_mixin<CharT, std::basic_ofstream<CharT>>; - - template <typename CharT> - using ifstream_mixin = stream_mixin<CharT, std::basic_ifstream<CharT>>; - - template <typename CharT> - using fstream_mixin = stream_mixin<CharT, std::basic_fstream<CharT>>; - - template <typename CharT> - class basic_ofstream : public ofstream_mixin<CharT> { - public: - basic_ofstream(FILE* f) - : ofstream_mixin<CharT>(f) - {} - - basic_ofstream(basic_ofstream&& other) - : ofstream_mixin<CharT>(std::move(other)) - {} - }; - - template <typename CharT> - class basic_ifstream : public ifstream_mixin<CharT> { - public: - basic_ifstream(FILE* f) - : ifstream_mixin<CharT>(f) - {} - - basic_ifstream(basic_ifstream&& other) - : ifstream_mixin<CharT>(std::move(other)) - {} - }; - - template <typename CharT> - class basic_fstream : public fstream_mixin<CharT> { - public: - basic_fstream(FILE* f) - : fstream_mixin<CharT>(f) - {} - - basic_fstream(basic_fstream&& other) - : fstream_mixin<CharT>(std::move(other)) - {} - }; - - using ofstream = basic_ofstream<char>; - using ifstream = basic_ifstream<char>; - using fstream = basic_fstream<char>; - - struct get_redirected_out_stream_ { - static inline ofstream& call(std::FILE* f) { - static std::unique_ptr<ofstream> stream; - - if (!stream) - stream.reset(new ofstream(f)); - return *stream; - } - - }; +namespace criterion { - struct get_redirected_in_stream_ { - static inline ifstream& call(std::FILE* f) { - static std::unique_ptr<ifstream> stream; - if (!stream) - stream.reset(new ifstream(f)); - return *stream; - } - }; + using ofstream = internal::basic_ofstream<char>; + using ifstream = internal::basic_ifstream<char>; + using fstream = internal::basic_fstream<char>; static inline ofstream& get_redirected_cin(void) { - return get_redirected_out_stream_::call(cr_get_redirected_stdin()); + return internal::get_redirected_out_stream_::call(cr_get_redirected_stdin()); } static inline ifstream& get_redirected_cout(void) { - return get_redirected_in_stream_::call(cr_get_redirected_stdout()); + return internal::get_redirected_in_stream_::call(cr_get_redirected_stdout()); } static inline ifstream& get_redirected_cerr(void) { - return get_redirected_in_stream_::call(cr_get_redirected_stderr()); + return internal::get_redirected_in_stream_::call(cr_get_redirected_stderr()); } # if __GNUC__ >= 5 From cb9d702f06dbd15e703881ffc1e42cc39d197001 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 19 Nov 2015 02:13:09 +0100 Subject: [PATCH 160/211] [Issue #77] Fixed msgmerge being called with --lang on versions <=0.17 by cmake. --- .cmake/Modules/GettextTranslate.cmake | 28 +++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/.cmake/Modules/GettextTranslate.cmake b/.cmake/Modules/GettextTranslate.cmake index 553b13d1..02307ff0 100644 --- a/.cmake/Modules/GettextTranslate.cmake +++ b/.cmake/Modules/GettextTranslate.cmake @@ -252,13 +252,29 @@ macro(GettextTranslate) else() - add_custom_target(${PO_TARGET} - COMMAND ${GettextTranslate_MSGMERGE_EXECUTABLE} --lang=${lang} - ${PO_FILE_NAME} ${TEMPLATE_FILE_ABS} - -o ${PO_FILE_NAME}.new - COMMAND mv ${PO_FILE_NAME}.new ${PO_FILE_NAME} - DEPENDS ${TEMPLATE_FILE_ABS} + execute_process( + COMMAND ${GettextTranslate_MSGMERGE_EXECUTABLE} --version + OUTPUT_VARIABLE MSGMERGE_VERSION_MSG ) + string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" MSGMERGE_VERSION "${MSGMERGE_VERSION_MSG}") + + if ("${MSGMERGE_VERSION}" VERSION_GREATER "0.17") + add_custom_target(${PO_TARGET} + COMMAND ${GettextTranslate_MSGMERGE_EXECUTABLE} --lang=${lang} + ${PO_FILE_NAME} ${TEMPLATE_FILE_ABS} + -o ${PO_FILE_NAME}.new + COMMAND mv ${PO_FILE_NAME}.new ${PO_FILE_NAME} + DEPENDS ${TEMPLATE_FILE_ABS} + ) + else () + add_custom_target(${PO_TARGET} + COMMAND ${GettextTranslate_MSGMERGE_EXECUTABLE} + ${PO_FILE_NAME} ${TEMPLATE_FILE_ABS} + -o ${PO_FILE_NAME}.new + COMMAND mv ${PO_FILE_NAME}.new ${PO_FILE_NAME} + DEPENDS ${TEMPLATE_FILE_ABS} + ) + endif () endif() From eeb7ab24f3a87c0a8b9470c7b23c6791c74dbd12 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 19 Nov 2015 14:32:24 +0100 Subject: [PATCH 161/211] Fixed list formatting for supported compilers in documentation --- doc/setup.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/setup.rst b/doc/setup.rst index b4001e2b..f5f4c2d3 100644 --- a/doc/setup.rst +++ b/doc/setup.rst @@ -7,6 +7,7 @@ Prerequisites The library is supported on Linux, OS X, FreeBSD, and Windows. The following compilers are supported to compile both the library and the tests: + * GCC 4.9+ * Clang 3.4+ * MSVC 14+ (Included in Visual Studio 2015 or later) From 2fbf8e8f1d7b092b77c9de939391644d780c5aa2 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 20 Nov 2015 18:49:48 +0100 Subject: [PATCH 162/211] Updated libcsptr for icc compilation --- dependencies/libcsptr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies/libcsptr b/dependencies/libcsptr index 2762164a..0d52904d 160000 --- a/dependencies/libcsptr +++ b/dependencies/libcsptr @@ -1 +1 @@ -Subproject commit 2762164acfaa712fea7dec6ed760ff88f7d2e026 +Subproject commit 0d52904da5d7bd0a3eac3c47e9f9bb10cd78a26e From 80a45b5eccf1fdacbc823d5e7c75f41612f8203a Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 20 Nov 2015 19:10:35 +0100 Subject: [PATCH 163/211] [Issue #76] Fixed compilation errors for ICC --- src/compat/pipe.h | 1 + src/core/runner_coroutine.c | 17 ++++++++--------- src/entry/main.c | 4 ++-- src/io/redirect.c | 6 +++--- src/string/extmatch.c | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/compat/pipe.h b/src/compat/pipe.h index f6a607e8..d0e162d6 100644 --- a/src/compat/pipe.h +++ b/src/compat/pipe.h @@ -47,6 +47,7 @@ enum criterion_std_fd { }; enum pipe_opt { + PIPE_NOOPT = 0, PIPE_DUP = 1 << 0, PIPE_CLOSE = 1 << 1, }; diff --git a/src/core/runner_coroutine.c b/src/core/runner_coroutine.c index 6e557a3d..50f336c6 100644 --- a/src/core/runner_coroutine.c +++ b/src/core/runner_coroutine.c @@ -102,6 +102,7 @@ static int skip_disabled(struct run_next_context *ctx) { struct worker *run_next_test(struct criterion_test_set *p_set, struct criterion_global_stats *p_stats, ccrContParam) { + struct worker *worker = NULL; ccrUseNamedContext(run_next_context, ctx); @@ -122,8 +123,7 @@ struct worker *run_next_test(struct criterion_test_set *p_set, ctx->suite_stats = suite_stats_init(&ctx->suite_set->suite); - struct event ev = { .kind = PRE_SUITE }; - stat_push_event(ctx->stats, ctx->suite_stats, NULL, &ev); + stat_push_event(ctx->stats, ctx->suite_stats, NULL, &(struct event) { .kind = PRE_SUITE }); for (ctx->nt = ctx->suite_set->tests->first; ctx->nt; ctx->nt = ctx->nt->next) { ctx->test = (void*) (ctx->nt + 1); @@ -138,15 +138,14 @@ struct worker *run_next_test(struct criterion_test_set *p_set, for (ctx->i = 0; ctx->i < ctx->params.length; ++ctx->i) { ctx->test_stats = test_stats_init(ctx->test); - struct test_single_param param = { - ctx->params.size, - (char *) ctx->params.params + ctx->i * ctx->params.size - }; - struct worker *worker = run_test(ctx->stats, + worker = run_test(ctx->stats, ctx->suite_stats, ctx->test_stats, - ¶m); + &(struct test_single_param) { + ctx->params.size, + (char *) ctx->params.params + ctx->i * ctx->params.size + }); ccrReturn(cleanup_and_return_worker(ctx, worker)); } @@ -159,7 +158,7 @@ struct worker *run_next_test(struct criterion_test_set *p_set, if (skip_disabled(ctx)) continue; - struct worker *worker = run_test(ctx->stats, + worker = run_test(ctx->stats, ctx->suite_stats, ctx->test_stats, NULL); diff --git a/src/entry/main.c b/src/entry/main.c index 792ff799..1f642434 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -188,7 +188,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { if (env_jobs) opt->jobs = atou(env_jobs); if (env_logging_threshold) - opt->logging_threshold = atou(env_logging_threshold); + opt->logging_threshold = (enum criterion_logging_level) atou(env_logging_threshold); if (env_short_filename) opt->short_filename = !strcmp("1", env_short_filename); @@ -206,7 +206,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { bool quiet = false; for (int c; (c = getopt_long(argc, argv, "hvlfj:SqO:", opts, NULL)) != -1;) { switch (c) { - case 'b': criterion_options.logging_threshold = atou(DEF(optarg, "1")); break; + case 'b': criterion_options.logging_threshold = (enum criterion_logging_level) atou(DEF(optarg, "1")); break; case 'y': criterion_options.always_succeed = true; break; case 'z': criterion_options.no_early_exit = true; break; case 'k': criterion_options.use_ascii = true; break; diff --git a/src/io/redirect.c b/src/io/redirect.c index a9d80d0d..2ee3e196 100644 --- a/src/io/redirect.c +++ b/src/io/redirect.c @@ -49,7 +49,7 @@ void cr_redirect_stdin(void) { FILE* cr_get_redirected_stdout(void) { static FILE *f; if (!f) { - f = pipe_in(stdout_redir, 0); + f = pipe_in(stdout_redir, PIPE_NOOPT); if (!f) cr_assert_fail("Could not get redirected stdout read end."); } @@ -59,7 +59,7 @@ FILE* cr_get_redirected_stdout(void) { FILE* cr_get_redirected_stderr(void) { static FILE *f; if (!f) { - f = pipe_in(stderr_redir, 0); + f = pipe_in(stderr_redir, PIPE_NOOPT); if (!f) cr_assert_fail("Could not get redirected stderr read end."); } @@ -69,7 +69,7 @@ FILE* cr_get_redirected_stderr(void) { FILE* cr_get_redirected_stdin(void) { static FILE *f; if (!f) { - f = pipe_out(stdin_redir, 0); + f = pipe_out(stdin_redir, PIPE_NOOPT); if (!f) cr_assert_fail("Could not get redirected stdin write end."); } diff --git a/src/string/extmatch.c b/src/string/extmatch.c index de63088e..6e9e5504 100644 --- a/src/string/extmatch.c +++ b/src/string/extmatch.c @@ -99,8 +99,8 @@ typedef struct { char *str; } handler_arg; -static int active() { return 1; } -static int inactive() { return 0; } +static int active(struct context *ctx) { return 1; } +static int inactive(struct context *ctx) { return 0; } static int is_eos(struct context *ctx) { return peek_char(ctx) == '\0'; From 5bdccd862a1863ebdfbeecb68449105cd2393fe7 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 21 Nov 2015 00:07:53 +0100 Subject: [PATCH 164/211] Fixed unused parameter warnings --- src/string/extmatch.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/string/extmatch.c b/src/string/extmatch.c index 6e9e5504..185a2640 100644 --- a/src/string/extmatch.c +++ b/src/string/extmatch.c @@ -99,8 +99,8 @@ typedef struct { char *str; } handler_arg; -static int active(struct context *ctx) { return 1; } -static int inactive(struct context *ctx) { return 0; } +static int active(CR_UNUSED struct context *ctx) { return 1; } +static int inactive(CR_UNUSED struct context *ctx) { return 0; } static int is_eos(struct context *ctx) { return peek_char(ctx) == '\0'; From fa29b3c6dbc9fd23f1c2da0c0d1a65393ebe0b7e Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 25 Nov 2015 20:10:09 +0100 Subject: [PATCH 165/211] Added back GCC 4.6 support --- .travis.yml | 28 +++++++++++++--- CMakeLists.txt | 18 ++++++++++- include/criterion/internal/common.h | 6 +++- .../internal/designated-initializer-compat.h | 10 +++--- include/criterion/internal/parameterized.h | 2 +- include/criterion/internal/stream.hxx | 32 ++++++++----------- include/criterion/internal/test.h | 4 +-- include/criterion/internal/theories.h | 2 +- include/criterion/redirect.h | 6 ++-- samples/CMakeLists.txt | 2 +- test/CMakeLists.txt | 2 +- 11 files changed, 74 insertions(+), 38 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3426f55d..a2ae4f73 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,6 +32,15 @@ matrix: CONFIGURATION: RelWithDebInfo CMAKE_OPTS: -DLANG_OBJC=ON DEPLOY: true + # Linux Debug, GCC 4.6 + - compiler: gcc + env: CONFIGURATION=Debug TESTS=OFF + # Linux Release, GCC 4.6 + - compiler: gcc + env: CONFIGURATION=Release TESTS=OFF + # Linux RelWithDebInfo, GCC 4.6 + - compiler: gcc + env: CONFIGURATION=RelWithDebInfo TESTS=OFF # OSX Debug, GCC 4.9 - os: osx compiler: gcc-4.9 @@ -67,6 +76,9 @@ matrix: CMAKE_OPTS: -DLANG_OBJC=ON DEPLOY: true + allow_failures: + - compiler: gcc + before_install: - | if [ "$TRAVIS_OS_NAME" = "osx" ] && [ "$CC" = "clang" ]; then @@ -83,14 +95,19 @@ script: - > cmake -Wno-dev - -DCTESTS=ON + -DCTESTS=${TESTS:-ON} -DCOVERALLS=${COVERAGE:-OFF} -DCMAKE_BUILD_TYPE=${CONFIGURATION} -DCMAKE_INSTALL_PREFIX=criterion-${TRAVIS_TAG} ${CMAKE_OPTS} .. - - TERM=dumb cmake --build . --target criterion_tests -- -j4 - - ctest -j4 + - | + if [ "$TESTS" = "ON" ]; then + TERM=dumb cmake --build . --target criterion_tests -- -j4 + ctest -j4 + else + TERM=dumb cmake --build . -- -j4 + fi after_success: - | @@ -100,7 +117,10 @@ after_success: fi after_failure: - - cat Testing/Temporary/LastTest.log samples/*.{out,err} ../samples/tests/*.{out,err} + - | + if [ "$TESTS" = "ON" ]; then + cat Testing/Temporary/LastTest.log samples/*.{out,err} ../samples/tests/*.{out,err} + fi before_deploy: - make install diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ea2b7ac..15b7f398 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,22 @@ endif () include(Languages) +# Check for C++11 + +if (NOT MSVC AND CMAKE_CXX_COMPILER_WORKS) + include(CheckCXXCompilerFlag) + CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) + CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) + + if(COMPILER_SUPPORTS_CXX11) + set(CXX11_FLAG "-std=c++11") + elseif(COMPILER_SUPPORTS_CXX0X) + set(CXX11_FLAG "-std=c++0x") + else() + message(FATAL_ERROR "Compiler ${CMAKE_CXX_COMPILER} has no C++11 support.") + endif() +endif() + # Project setup & environment variables set(PROJECT_VERSION "2.1.0") @@ -53,7 +69,7 @@ set(CMAKE_CXX_FLAGS_DEFAULT "${CMAKE_CXX_FLAGS}") if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -g -std=gnu99") if (CMAKE_CXX_COMPILER_WORKS) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -g -std=c++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -g ${CXX11_FLAG}") endif () endif () diff --git a/include/criterion/internal/common.h b/include/criterion/internal/common.h index 8b547e5c..f651772e 100644 --- a/include/criterion/internal/common.h +++ b/include/criterion/internal/common.h @@ -42,7 +42,11 @@ # endif # ifdef __cplusplus -# define CR_ATTRIBUTE(Arg) [[gnu::Arg]] +# ifdef __GNUC__ +# define CR_ATTRIBUTE(Arg) __attribute__((Arg)) +# else +# define CR_ATTRIBUTE(Arg) [[gnu::Arg]] +# endif # define CR_BEGIN_C_API extern "C" { # define CR_END_C_API } # else diff --git a/include/criterion/internal/designated-initializer-compat.h b/include/criterion/internal/designated-initializer-compat.h index 9b99d050..e3c59780 100644 --- a/include/criterion/internal/designated-initializer-compat.h +++ b/include/criterion/internal/designated-initializer-compat.h @@ -112,11 +112,11 @@ CR_EXPAND(CRITERION_APPLY(CRITERION_ADD_PREFIX_ONCE, __VA_ARGS__)) # ifdef __cplusplus -# define CRITERION_MAKE_STRUCT(Type, ...) []() { \ - Type t; \ - std::memset(&t, 0, sizeof (t)); \ - CR_EXPAND(CRITERION_ADD_PREFIX(t, __VA_ARGS__)) \ - return t; \ +# define CRITERION_MAKE_STRUCT(Type, ...) []() -> Type { \ + Type t; \ + std::memset(&t, 0, sizeof (t)); \ + CR_EXPAND(CRITERION_ADD_PREFIX(t, __VA_ARGS__)) \ + return t; \ }() # else # define CRITERION_MAKE_STRUCT(Type, ...) { __VA_ARGS__ } diff --git a/include/criterion/internal/parameterized.h b/include/criterion/internal/parameterized.h index 017a5990..c254531d 100644 --- a/include/criterion/internal/parameterized.h +++ b/include/criterion/internal/parameterized.h @@ -38,7 +38,7 @@ # define CR_PARAM_TEST_BASE(Param, Category, Name, ...) \ CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name); \ struct criterion_test_extra_data CR_IDENTIFIER_(Category, Name, extra) = \ - CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ + CR_EXPAND(CRITERION_MAKE_STRUCT(criterion_test_extra_data, \ .lang_ = CR_LANG, \ .kind_ = CR_TEST_PARAMETERIZED, \ .param_ = CR_IDENTIFIER_(Category, Name, param), \ diff --git a/include/criterion/internal/stream.hxx b/include/criterion/internal/stream.hxx index d8c5a087..828dbdc4 100644 --- a/include/criterion/internal/stream.hxx +++ b/include/criterion/internal/stream.hxx @@ -20,8 +20,10 @@ public: std::ios::rdbuf(&*fbuf); } +# if __cplusplus > 199711L stream_mixin(const stream_mixin& other) = delete; stream_mixin& operator=(const stream_mixin& other) = delete; +# endif stream_mixin(stream_mixin&& other) : fbuf(std::move(other.fbuf)), @@ -45,47 +47,41 @@ public: }; template <typename CharT> - using ofstream_mixin = stream_mixin<CharT, std::basic_ofstream<CharT>>; - - template <typename CharT> - using ifstream_mixin = stream_mixin<CharT, std::basic_ifstream<CharT>>; - - template <typename CharT> - using fstream_mixin = stream_mixin<CharT, std::basic_fstream<CharT>>; - - template <typename CharT> - class basic_ofstream : public ofstream_mixin<CharT> { + class basic_ofstream : public stream_mixin<CharT, std::basic_ofstream<CharT>> { + typedef stream_mixin<CharT, std::basic_ofstream<CharT>> super; public: basic_ofstream(FILE* f) - : ofstream_mixin<CharT>(f) + : super(f) {} basic_ofstream(basic_ofstream&& other) - : ofstream_mixin<CharT>(std::move(other)) + : super(std::move(other)) {} }; template <typename CharT> - class basic_ifstream : public ifstream_mixin<CharT> { + class basic_ifstream : public stream_mixin<CharT, std::basic_ifstream<CharT>> { + typedef stream_mixin<CharT, std::basic_ifstream<CharT>> super; public: basic_ifstream(FILE* f) - : ifstream_mixin<CharT>(f) + : super(f) {} basic_ifstream(basic_ifstream&& other) - : ifstream_mixin<CharT>(std::move(other)) + : super(std::move(other)) {} }; template <typename CharT> - class basic_fstream : public fstream_mixin<CharT> { + class basic_fstream : public stream_mixin<CharT, std::basic_fstream<CharT>> { + typedef stream_mixin<CharT, std::basic_fstream<CharT>> super; public: basic_fstream(FILE* f) - : fstream_mixin<CharT>(f) + : super(f) {} basic_fstream(basic_fstream&& other) - : fstream_mixin<CharT>(std::move(other)) + : super(std::move(other)) {} }; diff --git a/include/criterion/internal/test.h b/include/criterion/internal/test.h index 2b4e3d95..0772f1f2 100644 --- a/include/criterion/internal/test.h +++ b/include/criterion/internal/test.h @@ -58,7 +58,7 @@ # define CR_TEST_BASE(Category, Name, ...) \ CR_TEST_PROTOTYPE_(Category, Name); \ struct criterion_test_extra_data CR_IDENTIFIER_(Category, Name, extra) = \ - CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ + CR_EXPAND(CRITERION_MAKE_STRUCT(criterion_test_extra_data, \ .lang_ = CR_LANG, \ .kind_ = CR_TEST_NORMAL, \ .param_ = (struct criterion_test_params(*)(void)) NULL, \ @@ -80,7 +80,7 @@ # define CR_SUITE_BASE(Name, ...) \ struct criterion_test_extra_data CR_SUITE_IDENTIFIER_(Name, extra) = \ - CR_EXPAND(CRITERION_MAKE_STRUCT(struct criterion_test_extra_data, \ + CR_EXPAND(CRITERION_MAKE_STRUCT(criterion_test_extra_data, \ .file_ = __FILE__, \ .line_ = 0, \ __VA_ARGS__ \ diff --git a/include/criterion/internal/theories.h b/include/criterion/internal/theories.h index 172d96df..798034f0 100644 --- a/include/criterion/internal/theories.h +++ b/include/criterion/internal/theories.h @@ -55,7 +55,7 @@ CR_END_C_API # ifdef __cplusplus # define CR_TH_VA_NUM(Type, ...) criterion_va_num__(__VA_ARGS__) -# define CR_TH_TEMP_ARRAY(Type, ...) []() { static Type arr[] = { __VA_ARGS__ }; return &arr; }() +# define CR_TH_TEMP_ARRAY(Type, ...) []() -> Type* { static Type arr[] = { __VA_ARGS__ }; return reinterpret_cast<Type*>(&arr); }() # else # define CR_TH_VA_NUM(Type, ...) sizeof ((Type[]) { __VA_ARGS__ }) / sizeof (Type) # define CR_TH_TEMP_ARRAY(Type, ...) &(Type[]) { __VA_ARGS__ } diff --git a/include/criterion/redirect.h b/include/criterion/redirect.h index 6fd5f588..b93f2a6a 100644 --- a/include/criterion/redirect.h +++ b/include/criterion/redirect.h @@ -91,9 +91,9 @@ CR_END_C_API namespace criterion { - using ofstream = internal::basic_ofstream<char>; - using ifstream = internal::basic_ifstream<char>; - using fstream = internal::basic_fstream<char>; + typedef internal::basic_ofstream<char> ofstream; + typedef internal::basic_ifstream<char> ifstream; + typedef internal::basic_fstream<char> fstream; static inline ofstream& get_redirected_cin(void) { return internal::get_redirected_out_stream_::call(cr_get_redirected_stdin()); diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index f8d6bbed..e56eeae5 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -1,6 +1,6 @@ if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS_DEFAULT} -std=c99 -Wall -Wextra -pedantic") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEFAULT} -std=c++11 -Wall -Wextra -pedantic") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEFAULT} ${CXX11_FLAG} -Wall -Wextra -pedantic") endif () include_directories(../include) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 96531bec..3e7c7476 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,7 +1,7 @@ if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS_DEFAULT} -std=gnu99 -Wall -Wextra") if (CMAKE_CXX_COMPILER_WORKS) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEFAULT} -std=c++11 -Wall -Wextra") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEFAULT} ${CXX11_FLAG} -Wall -Wextra") endif () endif () From 26b25cf1f97d7778db73d1dd54cf3269b66383a3 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Wed, 25 Nov 2015 20:16:26 +0100 Subject: [PATCH 166/211] Updated docs on the required version of GCC --- doc/setup.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/setup.rst b/doc/setup.rst index f5f4c2d3..4083fe66 100644 --- a/doc/setup.rst +++ b/doc/setup.rst @@ -8,7 +8,7 @@ The library is supported on Linux, OS X, FreeBSD, and Windows. The following compilers are supported to compile both the library and the tests: -* GCC 4.9+ +* GCC 4.9+ (Can be relaxed to GCC 4.6+ when not using C++) * Clang 3.4+ * MSVC 14+ (Included in Visual Studio 2015 or later) From 1beccec921b384b2c4e02a38e9fd496cdddc0ff1 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Thu, 26 Nov 2015 00:23:27 +0100 Subject: [PATCH 167/211] Added back CRITERION_ENABLE_TAP and added CRITERION_OUTPUTS environment variable. --- doc/env.rst | 5 +++++ src/entry/main.c | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/doc/env.rst b/doc/env.rst index 234a4966..2205bc51 100644 --- a/doc/env.rst +++ b/doc/env.rst @@ -93,3 +93,8 @@ Environment variables are alternatives to command line switches when set to 1. to its value. (\*nix only) * ``CRITERION_DISABLE_TIME_MEASUREMENTS``: Disables any time measurements on the tests. +* ``CRITERION_OUTPUTS``: Can be set to a comma-separated list of + ``PROVIDER:FILE`` entries. For instance, setting the variable to + ``tap:foo.tap,xml:bar.xml`` has the same effect as specifying ``--tap=foo.tap`` + and ``--xml=bar.xml`` at once. +* ``CRITERION_ENABLE_TAP``: (Deprecated, use CRITERION_OUTPUTS) Same as ``--tap``. diff --git a/src/entry/main.c b/src/entry/main.c index 1f642434..833f6ad0 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -200,10 +200,42 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { opt->measure_time = !!strcmp("1", DEF(getenv("CRITERION_DISABLE_TIME_MEASUREMENTS"), "0")); + bool quiet = false; + + // CRITERION_ENABLE_TAP backward compatibility. + // The environment variable is otherwise deprecated. + if (!strcmp("1", DEF(getenv("CRITERION_ENABLE_TAP"), "0"))) { + quiet = true; + criterion_add_output("tap", DEF(optarg, "-")); + } + bool do_list_tests = false; bool do_print_version = false; bool do_print_usage = false; - bool quiet = false; + + const char *outputs = getenv("CRITERION_OUTPUTS"); + if (outputs) { + char *out = strdup(outputs); + char *buf = NULL; + strtok_r(out, ",", &buf); + + for (char *s = out; s; s = strtok_r(NULL, ",", &buf)) { + s = strdup(s); + char *buf2 = NULL; + char *provider = strtok_r(s, ":", &buf2); + char *path = strtok_r(NULL, ":", &buf2); + + if (provider == NULL || path == NULL) { + do_print_usage = true; + goto end; + } + + quiet = true; + criterion_add_output(provider, path); + } + free(out); + } + for (int c; (c = getopt_long(argc, argv, "hvlfj:SqO:", opts, NULL)) != -1;) { switch (c) { case 'b': criterion_options.logging_threshold = (enum criterion_logging_level) atou(DEF(optarg, "1")); break; @@ -241,6 +273,8 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { default : do_print_usage = handle_unknown_arg; break; } } + +end: if (quiet) criterion_options.logging_threshold = CRITERION_LOG_LEVEL_QUIET; From 49abc860662f108ab6d10f84459638134fb19217 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 00:13:59 +0100 Subject: [PATCH 168/211] [Issue #76] Updated dyncall to latest for icc fix --- dependencies/dyncall | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies/dyncall b/dependencies/dyncall index 68c57f66..180a5b77 160000 --- a/dependencies/dyncall +++ b/dependencies/dyncall @@ -1 +1 @@ -Subproject commit 68c57f664d4fabbc5b80327fbf5661a3a5a51e06 +Subproject commit 180a5b77ff95a17991afdc6e9be3501eca99ad36 From 6bfdaffea8412ad4591f3deecbc9ee99cef80ec6 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 00:24:39 +0100 Subject: [PATCH 169/211] Fixed travis build translating 'ON' as 'true' in environment variables. --- .travis.yml | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/.travis.yml b/.travis.yml index a2ae4f73..5481f057 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,21 +17,21 @@ matrix: # Linux Debug, GCC 4.9 - compiler: gcc-4.9 env: - CONFIGURATION: Debug - GCOV: gcov-4.9 - CMAKE_OPTS: -DLANG_OBJC=ON - COVERAGE: ON + - CONFIGURATION=Debug + - GCOV=gcov-4.9 + - CMAKE_OPTS=-DLANG_OBJC=ON + - COVERAGE=ON # Linux Release, GCC 4.9 - compiler: gcc-4.9 env: - CONFIGURATION: Release - CMAKE_OPTS: -DLANG_OBJC=ON + - CONFIGURATION=Release + - CMAKE_OPTS=-DLANG_OBJC=ON # Linux RelWithDebInfo, GCC 4.9 - compiler: gcc-4.9 env: - CONFIGURATION: RelWithDebInfo - CMAKE_OPTS: -DLANG_OBJC=ON - DEPLOY: true + - CONFIGURATION=RelWithDebInfo + - CMAKE_OPTS=-DLANG_OBJC=ON + - DEPLOY=true # Linux Debug, GCC 4.6 - compiler: gcc env: CONFIGURATION=Debug TESTS=OFF @@ -45,9 +45,9 @@ matrix: - os: osx compiler: gcc-4.9 env: - CONFIGURATION: Debug - GCOV: gcov-4.9 - COVERAGE: ON + - CONFIGURATION=Debug + - GCOV=gcov-4.9 + - COVERAGE=ON # OSX Release, GCC 4.9 - os: osx compiler: gcc-4.9 @@ -60,21 +60,21 @@ matrix: - os: osx compiler: clang env: - CONFIGURATION: Debug - CMAKE_OPTS: -DLANG_OBJC=ON + - CONFIGURATION=Debug + - CMAKE_OPTS=-DLANG_OBJC=ON # OSX Release, Clang - os: osx compiler: clang env: - CONFIGURATION: Release - CMAKE_OPTS: -DLANG_OBJC=ON + - CONFIGURATION=Release + - CMAKE_OPTS=-DLANG_OBJC=ON # OSX RelWithDebInfo, Clang - os: osx compiler: clang env: - CONFIGURATION: RelWithDebInfo - CMAKE_OPTS: -DLANG_OBJC=ON - DEPLOY: true + - CONFIGURATION=RelWithDebInfo + - CMAKE_OPTS=-DLANG_OBJC=ON + - DEPLOY=true allow_failures: - compiler: gcc From a5de951a489502b51bc2df45ffcc4ee3f4b817b9 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 00:30:08 +0100 Subject: [PATCH 170/211] Fixed travis build not running tests by default --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 5481f057..e0c50afa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,10 @@ addons: - gobjc-4.9 - gnustep-devel +env: + global: + - TESTS=ON + matrix: include: # Linux Debug, GCC 4.9 From 635ddb204feabcd6a296b057c3f3c92b36022f84 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 00:46:01 +0100 Subject: [PATCH 171/211] Refactored travis config to install gcc 4.9 only on the relevant configurations --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e0c50afa..89729625 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: c sudo: false -addons: +_gcc-4.9-packages: &gcc49-packages apt: sources: - ubuntu-toolchain-r-test @@ -20,6 +20,7 @@ matrix: include: # Linux Debug, GCC 4.9 - compiler: gcc-4.9 + addons: *gcc49-packages env: - CONFIGURATION=Debug - GCOV=gcov-4.9 @@ -27,11 +28,13 @@ matrix: - COVERAGE=ON # Linux Release, GCC 4.9 - compiler: gcc-4.9 + addons: *gcc49-packages env: - CONFIGURATION=Release - CMAKE_OPTS=-DLANG_OBJC=ON # Linux RelWithDebInfo, GCC 4.9 - compiler: gcc-4.9 + addons: *gcc49-packages env: - CONFIGURATION=RelWithDebInfo - CMAKE_OPTS=-DLANG_OBJC=ON From 41d7123b4136e71538134290eaaa72844d157b1f Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 01:11:52 +0100 Subject: [PATCH 172/211] Cleaned up travis config --- .travis.yml | 63 +++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/.travis.yml b/.travis.yml index 89729625..57fa7592 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,19 +2,16 @@ language: c sudo: false -_gcc-4.9-packages: &gcc49-packages - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - gcc-4.9 - - g++-4.9 - - gobjc-4.9 - - gnustep-devel - -env: - global: - - TESTS=ON +_anchors: + - &gcc49-packages + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - gcc-4.9 + - g++-4.9 + - gobjc-4.9 + - gnustep-devel matrix: include: @@ -22,23 +19,23 @@ matrix: - compiler: gcc-4.9 addons: *gcc49-packages env: - - CONFIGURATION=Debug - - GCOV=gcov-4.9 - - CMAKE_OPTS=-DLANG_OBJC=ON - - COVERAGE=ON + CONFIGURATION: Debug + GCOV: gcov-4.9 + CMAKE_OPTS: -DLANG_OBJC=ON + COVERAGE: "ON" # Linux Release, GCC 4.9 - compiler: gcc-4.9 addons: *gcc49-packages env: - - CONFIGURATION=Release - - CMAKE_OPTS=-DLANG_OBJC=ON + CONFIGURATION: Release + CMAKE_OPTS: -DLANG_OBJC=ON # Linux RelWithDebInfo, GCC 4.9 - compiler: gcc-4.9 addons: *gcc49-packages env: - - CONFIGURATION=RelWithDebInfo - - CMAKE_OPTS=-DLANG_OBJC=ON - - DEPLOY=true + CONFIGURATION: RelWithDebInfo + CMAKE_OPTS: -DLANG_OBJC=ON + DEPLOY: true # Linux Debug, GCC 4.6 - compiler: gcc env: CONFIGURATION=Debug TESTS=OFF @@ -52,9 +49,9 @@ matrix: - os: osx compiler: gcc-4.9 env: - - CONFIGURATION=Debug - - GCOV=gcov-4.9 - - COVERAGE=ON + CONFIGURATION: Debug + GCOV: gcov-4.9 + COVERAGE: "ON" # OSX Release, GCC 4.9 - os: osx compiler: gcc-4.9 @@ -67,21 +64,21 @@ matrix: - os: osx compiler: clang env: - - CONFIGURATION=Debug - - CMAKE_OPTS=-DLANG_OBJC=ON + CONFIGURATION: Debug + CMAKE_OPTS: -DLANG_OBJC=ON # OSX Release, Clang - os: osx compiler: clang env: - - CONFIGURATION=Release - - CMAKE_OPTS=-DLANG_OBJC=ON + CONFIGURATION: Release + CMAKE_OPTS: -DLANG_OBJC=ON # OSX RelWithDebInfo, Clang - os: osx compiler: clang env: - - CONFIGURATION=RelWithDebInfo - - CMAKE_OPTS=-DLANG_OBJC=ON - - DEPLOY=true + CONFIGURATION: RelWithDebInfo + CMAKE_OPTS: -DLANG_OBJC=ON + DEPLOY: true allow_failures: - compiler: gcc @@ -109,7 +106,7 @@ script: ${CMAKE_OPTS} .. - | - if [ "$TESTS" = "ON" ]; then + if [ "${TESTS:-ON}" = "ON" ]; then TERM=dumb cmake --build . --target criterion_tests -- -j4 ctest -j4 else From 56f0abfd49f9002665cc92232b32bede37ea4a8a Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 11:48:52 +0100 Subject: [PATCH 173/211] Added install checks on travis builds --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index 57fa7592..3e4937b1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -112,6 +112,11 @@ script: else TERM=dumb cmake --build . -- -j4 fi + - | + make DESTDIR=out install + diff <(find ../include/ | sed 's/^..\///g') \ + <(find out/usr/local/include/ | sed 's/out\/usr\/local\///g') \ + || exit 1 after_success: - | From 85095ba7e7fff97a6bfaf000e1462efc726ff84b Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 11:59:39 +0100 Subject: [PATCH 174/211] Disable --quiet when the provider output path is not stderr --- src/entry/main.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/entry/main.c b/src/entry/main.c index 833f6ad0..5d71a688 100644 --- a/src/entry/main.c +++ b/src/entry/main.c @@ -249,9 +249,19 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { case 'p': criterion_options.pattern = optarg; break; #endif case 'q': quiet = true; break; - case 't': quiet = true; criterion_add_output("tap", DEF(optarg, "-")); break; - case 'x': quiet = true; criterion_add_output("xml", DEF(optarg, "-")); break; - case 'n': quiet = true; criterion_add_output("json", DEF(optarg, "-")); break; + + { + const char *provider; + case 't': provider = "tap"; goto provider_def; + case 'x': provider = "xml"; goto provider_def; + case 'n': provider = "json"; goto provider_def; + + provider_def: {} + const char *path = DEF(optarg, "-"); + quiet = !strcmp(path, "-"); + criterion_add_output(provider, path); + } break; + case 'l': do_list_tests = true; break; case 'v': do_print_version = true; break; case 'h': do_print_usage = true; break; @@ -266,7 +276,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { break; } - quiet = true; + quiet = !strcmp(path, "-"); criterion_add_output(arg, path); } break; case '?': From 07f109eb6ef602d5f0280d4cf8ccb0df57ef3b94 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 12:18:38 +0100 Subject: [PATCH 175/211] Added error messages when reporting fails --- po/POTFILES.in | 1 + po/fr.po | 16 +++++++++++++--- src/core/runner.c | 3 +-- src/io/output.c | 21 ++++++++++++++++++++- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/po/POTFILES.in b/po/POTFILES.in index 358d39c7..d37bcf23 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -2,3 +2,4 @@ src/log/normal.c src/string/i18n.c src/core/runner.c +src/io/output.c diff --git a/po/fr.po b/po/fr.po index 6e8fe381..25f40f9d 100644 --- a/po/fr.po +++ b/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: criterion 2.0.0\n" "Report-Msgid-Bugs-To: franklinmathieu+criterion@gmail.com\n" -"POT-Creation-Date: 2015-11-11 00:24+0100\n" +"POT-Creation-Date: 2015-11-27 12:16+0100\n" "PO-Revision-Date: 2015-04-03 17:58+0200\n" "Last-Translator: <franklinmathieu@gmail.com>\n" "Language-Team: French\n" @@ -185,7 +185,7 @@ msgstr "L'instruction `%1$s` a levé une instance de l'exception `%2$s`." msgid "The statement `%1$s` did not throw an instance of the `%2$s` exception." msgstr "L'instruction `%1$s` n'a pas levé d'instance de l'exception `%2$s`." -#: src/core/runner.c:56 +#: src/core/runner.c:58 #, c-format msgid "" "%1$sWarning! Criterion has detected that it is running under valgrind, but " @@ -196,7 +196,7 @@ msgstr "" "l'option no_early_exit est explicitement désactivée. Les rapports d'erreur " "ne seront pas précis!%2$s\n" -#: src/core/runner.c:60 +#: src/core/runner.c:62 #, c-format msgid "" "%1$sWarning! Criterion has detected that it is running under valgrind, but " @@ -206,3 +206,13 @@ msgstr "" "%1$sAttention! Criterion a détecté qu'il a été lancé avec valgrind, mais le " "nombre de tâches est explicitement défini. Les rapports d'erreur risquent " "d'être déroutants!%2$s\n" + +#: src/io/output.c:12 +#, c-format +msgid "Could not open the file @ `%1$s` for %2$s reporting.\n" +msgstr "Impossible d'ouvrir le fichier `%1$s` pour faire le rapport %2$s.\n" + +#: src/io/output.c:13 +#, c-format +msgid "Writing %1$s report in `%2$s`.\n" +msgstr "Écriture du rapport %1$s dans `%2$s`.\n" diff --git a/src/core/runner.c b/src/core/runner.c index 38a85fc3..d5c6a003 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -462,9 +462,8 @@ static int criterion_run_all_tests_impl(struct criterion_test_set *set) { goto cleanup; report(POST_ALL, stats); - log(post_all, stats); - process_all_output(stats); + log(post_all, stats); cleanup: sfree(g_worker_pipe); diff --git a/src/io/output.c b/src/io/output.c index 25831e42..be5dda10 100644 --- a/src/io/output.c +++ b/src/io/output.c @@ -3,6 +3,18 @@ #include <khash.h> #include <kvec.h> #include "criterion/output.h" +#include "criterion/logging.h" +#include "string/i18n.h" + +typedef const char *const msg_t; + +#ifdef ENABLE_NLS +static msg_t msg_err = N_("Could not open the file @ `%1$s` for %2$s reporting.\n"); +static msg_t msg_ok = N_("Writing %1$s report in `%2$s`.\n"); +#else +static msg_t msg_err = "Could not open the file @ `%s` for %s reporting.\n"; +static msg_t msg_ok = "Writing %s report in `%s`.\n"; +#endif typedef kvec_t(const char *) str_vec; @@ -69,7 +81,8 @@ void process_all_output(struct criterion_global_stats *stats) { continue; criterion_reporter *report = kh_value(reporters, k); - khint_t ko = kh_get(ht_path, outputs, kh_key(reporters, k)); + const char *name = kh_key(reporters, k); + khint_t ko = kh_get(ht_path, outputs, name); if (ko == kh_end(outputs)) continue; @@ -83,6 +96,12 @@ void process_all_output(struct criterion_global_stats *stats) { else f = fopen(path, "w"); + if (!f) { + criterion_perror(_(msg_err), path, name); + continue; + } + + criterion_pinfo(CRITERION_PREFIX_DASHES, _(msg_ok), name, path); report(f, stats); } } From 11b84284f783aa89d8b38bf77570e8255896fe59 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 12:24:42 +0100 Subject: [PATCH 176/211] Print strerror when failing to open a report file --- po/fr.po | 13 +++++++------ src/io/output.c | 8 +++++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/po/fr.po b/po/fr.po index 25f40f9d..6056b865 100644 --- a/po/fr.po +++ b/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: criterion 2.0.0\n" "Report-Msgid-Bugs-To: franklinmathieu+criterion@gmail.com\n" -"POT-Creation-Date: 2015-11-27 12:16+0100\n" +"POT-Creation-Date: 2015-11-27 12:24+0100\n" "PO-Revision-Date: 2015-04-03 17:58+0200\n" "Last-Translator: <franklinmathieu@gmail.com>\n" "Language-Team: French\n" @@ -207,12 +207,13 @@ msgstr "" "nombre de tâches est explicitement défini. Les rapports d'erreur risquent " "d'être déroutants!%2$s\n" -#: src/io/output.c:12 -#, c-format -msgid "Could not open the file @ `%1$s` for %2$s reporting.\n" -msgstr "Impossible d'ouvrir le fichier `%1$s` pour faire le rapport %2$s.\n" - #: src/io/output.c:13 +#, fuzzy, c-format +msgid "Could not open the file @ `%1$s` for %2$s reporting: %3$s.\n" +msgstr "" +"Impossible d'ouvrir le fichier `%1$s` pour faire le rapport %2$s: %3$s.\n" + +#: src/io/output.c:14 #, c-format msgid "Writing %1$s report in `%2$s`.\n" msgstr "Écriture du rapport %1$s dans `%2$s`.\n" diff --git a/src/io/output.c b/src/io/output.c index be5dda10..d3fd05d1 100644 --- a/src/io/output.c +++ b/src/io/output.c @@ -2,6 +2,7 @@ #include <string.h> #include <khash.h> #include <kvec.h> +#include <errno.h> #include "criterion/output.h" #include "criterion/logging.h" #include "string/i18n.h" @@ -9,10 +10,10 @@ typedef const char *const msg_t; #ifdef ENABLE_NLS -static msg_t msg_err = N_("Could not open the file @ `%1$s` for %2$s reporting.\n"); +static msg_t msg_err = N_("Could not open the file @ `%1$s` for %2$s reporting: %3$s.\n"); static msg_t msg_ok = N_("Writing %1$s report in `%2$s`.\n"); #else -static msg_t msg_err = "Could not open the file @ `%s` for %s reporting.\n"; +static msg_t msg_err = "Could not open the file @ `%s` for %s reporting: %s.\n"; static msg_t msg_ok = "Writing %s report in `%s`.\n"; #endif @@ -97,7 +98,8 @@ void process_all_output(struct criterion_global_stats *stats) { f = fopen(path, "w"); if (!f) { - criterion_perror(_(msg_err), path, name); + int errno2 = errno; + criterion_perror(_(msg_err), path, name, strerror(errno2)); continue; } From 8a0540b5ab6ca084b06d2e93e9e04a40aebeced0 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 12:26:49 +0100 Subject: [PATCH 177/211] Revert "Added install checks on travis builds" This reverts commit 56f0abfd49f9002665cc92232b32bede37ea4a8a. --- .travis.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3e4937b1..57fa7592 100644 --- a/.travis.yml +++ b/.travis.yml @@ -112,11 +112,6 @@ script: else TERM=dumb cmake --build . -- -j4 fi - - | - make DESTDIR=out install - diff <(find ../include/ | sed 's/^..\///g') \ - <(find out/usr/local/include/ | sed 's/out\/usr\/local\///g') \ - || exit 1 after_success: - | From 3e489597983b49b183d8746dec24be0df8aed552 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 12:31:38 +0100 Subject: [PATCH 178/211] Added --quiet implication of having a provider write to stderr in documentation --- doc/env.rst | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/doc/env.rst b/doc/env.rst index 2205bc51..e980f71d 100644 --- a/doc/env.rst +++ b/doc/env.rst @@ -24,19 +24,20 @@ Command line arguments * ``-S or --short-filename``: The filenames are displayed in their short form. * ``--always-succeed``: The process shall exit with a status of ``0``. * ``--tap[=FILE]``: Writes a TAP (Test Anything Protocol) report to FILE. - No file or ``"-"`` means ``stderr``. This option is equivalent to - ``--output=tap:FILE``. + No file or ``"-"`` means ``stderr`` and implies ``--quiet``. This option is + equivalent to ``--output=tap:FILE``. * ``--xml[=FILE]``: Writes JUnit4 XML report to FILE. - No file or ``"-"`` means ``stderr``. This option is equivalent to - ``--output=xml:FILE``. + No file or ``"-"`` means ``stderr`` and implies ``--quiet``. This option is + equivalent to ``--output=tap:FILE``. * ``--json[=FILE]``: Writes a JSON report to FILE. - No file or ``"-"`` means ``stderr``. This option is equivalent to - ``--output=json:FILE``. + No file or ``"-"`` means ``stderr`` and implies ``--quiet``. This option is + equivalent to ``--output=tap:FILE``. * ``--verbose[=level]``: Makes the output verbose. When provided with an integer, sets the verbosity level to that integer. * ``-OPROVIDER:FILE or --output=PROVIDER:FILE``: Write a test report to FILE - using the output provider named by PROVIDER. FILE may be a relative path, or - ``"-"`` to write to ``stderr``. + using the output provider named by PROVIDER. + If FILE is ``"-"``, it implies ``--quiet``, and the report shall be written + to ``stderr``. Shell Wildcard Pattern ---------------------- From d16ce3ae615a0ec0635f3b006def9843e9e8d08c Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 12:52:40 +0100 Subject: [PATCH 179/211] Refactored main.c -> params.c --- CMakeLists.txt | 2 +- src/entry/{main.c => params.c} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/entry/{main.c => params.c} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 15b7f398..4c32d647 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -174,7 +174,7 @@ set(SOURCE_FILES src/string/i18n.c src/string/i18n.h src/entry/options.c - src/entry/main.c + src/entry/params.c src/entry/entry.c src/common.h src/config.h diff --git a/src/entry/main.c b/src/entry/params.c similarity index 100% rename from src/entry/main.c rename to src/entry/params.c From 090e8571fe8250d6771faf8686d51244627a098f Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 12:55:24 +0100 Subject: [PATCH 180/211] Added missing license headers --- include/criterion/internal/redirect.h | 23 +++++++++++++++++++++++ src/compat/time.h | 23 +++++++++++++++++++++++ src/entry/entry.c | 23 +++++++++++++++++++++++ src/string/i18n.h | 23 +++++++++++++++++++++++ 4 files changed, 92 insertions(+) diff --git a/include/criterion/internal/redirect.h b/include/criterion/internal/redirect.h index 64c003b7..4d4914d2 100644 --- a/include/criterion/internal/redirect.h +++ b/include/criterion/internal/redirect.h @@ -1,3 +1,26 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ #ifndef CRITERION_INTERNAL_REDIRECT_H_ # define CRITERION_INTERNAL_REDIRECT_H_ diff --git a/src/compat/time.h b/src/compat/time.h index 14f301d9..427a137c 100644 --- a/src/compat/time.h +++ b/src/compat/time.h @@ -1,3 +1,26 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ #ifndef TIMER_H_ # define TIMER_H_ diff --git a/src/entry/entry.c b/src/entry/entry.c index 71e9b9d0..25301b11 100644 --- a/src/entry/entry.c +++ b/src/entry/entry.c @@ -1,3 +1,26 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ #include "criterion/criterion.h" CR_API int main(int argc, char *argv[]) { diff --git a/src/string/i18n.h b/src/string/i18n.h index 827dc0a2..8613c9d2 100644 --- a/src/string/i18n.h +++ b/src/string/i18n.h @@ -1,3 +1,26 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ #ifndef I18N_H_ # define I18N_H_ From d55869a5e52eadbb39e6980b107711b221543985 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 13:43:59 +0100 Subject: [PATCH 181/211] Moved criterion_test_params to internal API --- include/criterion/internal/parameterized.h | 42 ++++++++++++++++++++++ include/criterion/types.h | 42 +--------------------- src/core/runner_coroutine.c | 1 + 3 files changed, 44 insertions(+), 41 deletions(-) diff --git a/include/criterion/internal/parameterized.h b/include/criterion/internal/parameterized.h index c254531d..4fbd5117 100644 --- a/include/criterion/internal/parameterized.h +++ b/include/criterion/internal/parameterized.h @@ -27,6 +27,48 @@ # include "test.h" # include "../types.h" +struct criterion_test_params { + size_t size; + void *params; + size_t length; + void (*cleanup)(struct criterion_test_params *); + +# ifdef __cplusplus + constexpr criterion_test_params(size_t size, void *params, size_t length) + : size(size) + , params(params) + , length(length) + , cleanup(nullptr) + {} + + constexpr criterion_test_params(size_t size, void *params, size_t length, + void (*cleanup)(struct criterion_test_params *)) + : size(size) + , params(params) + , length(length) + , cleanup(cleanup) + {} + + template <typename T> + constexpr criterion_test_params(std::vector<T, criterion::allocator<T>>& vec, + void (*cleanup)(criterion_test_params *) = nullptr) + : size(sizeof (T)) + , params(&vec[0]) + , length(vec.size()) + , cleanup(cleanup) + {} + + template <typename T, unsigned int N> + constexpr criterion_test_params(T (&arr)[N], + void (*cleanup)(criterion_test_params *) = nullptr) + : size(sizeof (arr[0])) + , params(static_cast<void*>(&arr)) + , length(N) + , cleanup(cleanup) + {} +# endif +}; + # ifdef __cplusplus # define CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name) \ extern "C" void CR_IDENTIFIER_(Category, Name, impl)(Param) diff --git a/include/criterion/types.h b/include/criterion/types.h index 905b6ac0..5c9cc33b 100644 --- a/include/criterion/types.h +++ b/include/criterion/types.h @@ -51,47 +51,7 @@ enum criterion_test_kind { CR_TEST_PARAMETERIZED, }; -struct criterion_test_params { - size_t size; - void *params; - size_t length; - void (*cleanup)(struct criterion_test_params *); - -# ifdef __cplusplus - constexpr criterion_test_params(size_t size, void *params, size_t length) - : size(size) - , params(params) - , length(length) - , cleanup(nullptr) - {} - - constexpr criterion_test_params(size_t size, void *params, size_t length, - void (*cleanup)(struct criterion_test_params *)) - : size(size) - , params(params) - , length(length) - , cleanup(cleanup) - {} - - template <typename T> - constexpr criterion_test_params(std::vector<T, criterion::allocator<T>>& vec, - void (*cleanup)(criterion_test_params *) = nullptr) - : size(sizeof (T)) - , params(&vec[0]) - , length(vec.size()) - , cleanup(cleanup) - {} - - template <typename T, unsigned int N> - constexpr criterion_test_params(T (&arr)[N], - void (*cleanup)(criterion_test_params *) = nullptr) - : size(sizeof (arr[0])) - , params(static_cast<void*>(&arr)) - , length(N) - , cleanup(cleanup) - {} -# endif -}; +struct criterion_test_params; struct criterion_test_extra_data { int sentinel_; diff --git a/src/core/runner_coroutine.c b/src/core/runner_coroutine.c index 50f336c6..57a091a5 100644 --- a/src/core/runner_coroutine.c +++ b/src/core/runner_coroutine.c @@ -25,6 +25,7 @@ #include <stdio.h> #include <csptr/smalloc.h> #include "criterion/logging.h" +#include "criterion/internal/parameterized.h" #include "runner_coroutine.h" #include "worker.h" #include "stats.h" From 4185058a896594ca78786fd739db9748cd0fb76a Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 13:45:23 +0100 Subject: [PATCH 182/211] Added doxygen-style doc in criterion.h --- include/criterion/criterion.h | 70 +++++++++++++++++++++++++++++++++++ include/criterion/types.h | 17 +++++++-- 2 files changed, 83 insertions(+), 4 deletions(-) diff --git a/include/criterion/criterion.h b/include/criterion/criterion.h index c90114e6..e1ce1581 100644 --- a/include/criterion/criterion.h +++ b/include/criterion/criterion.h @@ -30,16 +30,86 @@ # include "internal/test.h" +/** + * Test(Suite, Name, [Options...]) { Function body } + * + * Defines a new test. + * + * @param Suite The name of the test suite containing this test. + * @param Name The name of the test. + * @param Options An optional sequence of designated initializer key/value + * pairs as described in the `criterion_test_extra_data` structure + * (see criterion/types.h). + * Example: .exit_code = 1 + */ # define Test(...) CR_EXPAND(CR_TEST_BASE(__VA_ARGS__, .sentinel_ = 0)) +/** + * TestSuite(Name, [Options...]); + * + * Explicitely defines a test suite and its options. + * + * @param Name The name of the test suite. + * @param Options An optional sequence of designated initializer key/value + * pairs as described in the `criterion_test_extra_data` structure + * (see criterion/types.h). + * These options will provide the defaults for each test. + */ # define TestSuite(...) CR_EXPAND(CR_SUITE_BASE(__VA_ARGS__, .sentinel_ = 0)) CR_BEGIN_C_API +/** + * Initializes criterion and builds a set of all discovered tests. + * + * Using any of the functions and macros provided by criterion before calling + * this results in undefined behaviour. + * + * @returns the set of tests + */ CR_API struct criterion_test_set *criterion_initialize(void); + +/** + * Release all resources allocated by criterion. + * + * Using any of the functions and macros provided by criterion except + * criterion_initialize after this function is called results in undefined + * behaviour. + */ CR_API void criterion_finalize(struct criterion_test_set *tests); + +/** + * Run all the tests in the test set. + * + * @param[in] tests The set of tests that are to be executed. + * + * @returns 1 if all tests succeeded or criterion_options.always_succeed + * is true, 0 otherwise. + */ CR_API int criterion_run_all_tests(struct criterion_test_set *tests); + +/** + * Handles all default command-line parameters, as documented in: + * <http://criterion.readthedocs.org/en/latest/env.html>, and appropriately + * sets criterion_options. + * + * @param[in] argc The number of arguments in argv. + * @param[in] argv A null-terminated array of strings representing the arguments. + * @param[in] handle_unknown_arg Whether the function should print a message + * and exit when an unknown parameter is encountered. Use false if you want + * to handle additional parameters yourself. + * + * @returns 0 if the process should exit immediately after, for instance after + * printing the help message. + */ CR_API int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg); + +/** + * Manually registers a new test within the specified test set. + * + * @param[in] tests The set of tests you want to insert the test in. + * @param[in] test The newly created test. + */ CR_API void criterion_register_test(struct criterion_test_set *tests, struct criterion_test *test); diff --git a/include/criterion/types.h b/include/criterion/types.h index 5c9cc33b..2bb4a91d 100644 --- a/include/criterion/types.h +++ b/include/criterion/types.h @@ -36,10 +36,10 @@ using std::size_t; # include "internal/common.h" enum criterion_language { - CR_LANG_C, - CR_LANG_CXX, - CR_LANG_OBJC, - CR_LANG_OBJCXX, + CR_LANG_C, /// C + CR_LANG_CXX, /// C++ + CR_LANG_OBJC, /// Objective-C + CR_LANG_OBJCXX, /// Objective-C++ CR_LANG_SIZE_ // leave this at the end }; @@ -54,6 +54,13 @@ enum criterion_test_kind { struct criterion_test_params; struct criterion_test_extra_data { + // Start of private API + /* + * Warning: the fields below are not meant to be set manually. + * Setting them improperly *will* wreck havock in your tests. + * + * You've been warned. + */ int sentinel_; enum criterion_language lang_; enum criterion_test_kind kind_; @@ -61,6 +68,8 @@ struct criterion_test_extra_data { const char *identifier_; const char *file_; unsigned line_; + // Enf of private API + void (*init)(void); void (*fini)(void); int signal; From 5fddb5a0c8c35cb42f83f2cd4f142fa623db1d8b Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 13:57:38 +0100 Subject: [PATCH 183/211] Added doxygen docs for types.h --- include/criterion/types.h | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/include/criterion/types.h b/include/criterion/types.h index 2bb4a91d..e2a18d39 100644 --- a/include/criterion/types.h +++ b/include/criterion/types.h @@ -35,6 +35,9 @@ using std::size_t; # endif # include "internal/common.h" +/** + * Enumerates the supported languages for tests + */ enum criterion_language { CR_LANG_C, /// C CR_LANG_CXX, /// C++ @@ -46,13 +49,23 @@ enum criterion_language { extern const char *const cr_language_names[CR_LANG_SIZE_]; +/** + * Enumerates the supported kinds of tests + */ enum criterion_test_kind { CR_TEST_NORMAL, CR_TEST_PARAMETERIZED, }; +/** + * Represents a set of parameters for a parameterized test. + */ struct criterion_test_params; +/** + * Contains all the options that can be set for a test, through + * the Test and TestSuite macros, or other means. + */ struct criterion_test_extra_data { // Start of private API /* @@ -70,16 +83,19 @@ struct criterion_test_extra_data { unsigned line_; // Enf of private API - void (*init)(void); - void (*fini)(void); - int signal; - int exit_code; - bool disabled; - const char *description; - double timeout; - void *data; + void (*init)(void); /// The setup test fixture + void (*fini)(void); /// The setup test fixture + int signal; /// The expected signal raised by the test (or 0 if none) + int exit_code; /// The expected exit code returned by the test + bool disabled; /// Whether the test is disabled or not + const char *description; /// The description of a test + double timeout; /// A timeout for the test in seconds + void *data; /// Extra user data }; +/** + * Represents a test + */ struct criterion_test { const char *name; const char *category; @@ -87,6 +103,9 @@ struct criterion_test { struct criterion_test_extra_data *data; }; +/** + * Represents a test suite + */ struct criterion_suite { const char *name; struct criterion_test_extra_data *data; From d25ea68eb175f488d9df8cdc240dd4443801e84c Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 14:21:50 +0100 Subject: [PATCH 184/211] Removed the worker function pointer typedef from the public API --- include/criterion/types.h | 2 -- src/compat/process.h | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/criterion/types.h b/include/criterion/types.h index e2a18d39..4734656c 100644 --- a/include/criterion/types.h +++ b/include/criterion/types.h @@ -123,6 +123,4 @@ struct criterion_test_set { size_t tests; }; -typedef void (*cr_worker_func)(struct criterion_test *, struct criterion_suite *); - #endif /* !CRITERION_TYPES_H_ */ diff --git a/src/compat/process.h b/src/compat/process.h index 8b965ab4..1259e7ea 100644 --- a/src/compat/process.h +++ b/src/compat/process.h @@ -27,6 +27,8 @@ # include "criterion/types.h" # include "internal.h" +typedef void (*cr_worker_func)(struct criterion_test *, struct criterion_suite *); + struct proc_handle { #ifdef VANILLA_WIN32 HANDLE handle; From 5101a514a3eaa75a4d9b7f3e0a4925b643551f15 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 15:42:05 +0100 Subject: [PATCH 185/211] Moved cr_translate_assert_msg out of the public API --- include/criterion/assert.h | 6 ------ include/criterion/internal/assert.h | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/criterion/assert.h b/include/criterion/assert.h index 3c692830..fee1d4e8 100644 --- a/include/criterion/assert.h +++ b/include/criterion/assert.h @@ -30,12 +30,6 @@ # include "internal/assert.h" -CR_BEGIN_C_API - -CR_API char *cr_translate_assert_msg(int msg_index, ...); - -CR_END_C_API - // Base assertions # define cr_assert_fail(...) CR_EXPAND(cr_fail(CR_FAIL_ABORT_, __VA_ARGS__)) diff --git a/include/criterion/internal/assert.h b/include/criterion/internal/assert.h index 426e3aef..fd79d793 100644 --- a/include/criterion/internal/assert.h +++ b/include/criterion/internal/assert.h @@ -70,6 +70,12 @@ enum criterion_assert_messages { CRITERION_ASSERT_MSG_NONE_THROW, }; +CR_BEGIN_C_API + +CR_API char *cr_translate_assert_msg(int msg_index, ...); + +CR_END_C_API + # define CR_GET_CONDITION(Condition, ...) Condition # define CR_GET_CONDITION_STR(Condition, ...) #Condition # define CR_VA_SKIP(_, ...) __VA_ARGS__ From c4bc28b7fbf6b5e7d3a9a2c8c83b794db0cdb43a Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 27 Nov 2015 15:53:10 +0100 Subject: [PATCH 186/211] Added THEORIES cmake option --- CMakeLists.txt | 35 +++++++++++++++++++++++++++++------ samples/CMakeLists.txt | 9 +++++++-- samples/tests/CMakeLists.txt | 9 +++++++-- test/CMakeLists.txt | 7 ++++++- 4 files changed, 49 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c32d647..21356c0f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,12 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${MODULE_DIR}) set(LIBCSPTR_DISABLE_TESTS ON) set(LIBCSPTR_DISABLE_COVERALLS ON) +# Content options + +option(THEORIES "Activate the support for theories" ON) + +# Initialization + include(Submodules) include(Capabilities) @@ -15,7 +21,11 @@ if (MSVC) endif () add_subdirectory(dependencies/libcsptr/ EXCLUDE_FROM_ALL) -add_subdirectory(dependencies/dyncall/ EXCLUDE_FROM_ALL) + +if (THEORIES) + add_subdirectory(dependencies/dyncall/ EXCLUDE_FROM_ALL) + include_directories(dependencies/dyncall/dyncall/) +endif () include_directories(SYSTEM /usr/local/include @@ -24,7 +34,6 @@ include_directories(SYSTEM include_directories( dependencies/libcsptr/include/ - dependencies/dyncall/dyncall/ dependencies/valgrind/include/ dependencies/klib/ ) @@ -140,7 +149,6 @@ set(SOURCE_FILES src/core/stats.c src/core/stats.h src/core/ordered-set.c - src/core/theories.c src/compat/internal.h src/compat/pipe.c src/compat/pipe.h @@ -180,6 +188,12 @@ set(SOURCE_FILES src/config.h ) +if (THEORIES) + set (SOURCE_FILES ${SOURCE_FILES} + src/core/theories.c + ) +endif () + if (PCRE_FOUND) set (SOURCE_FILES ${SOURCE_FILES} src/string/extmatch.c @@ -215,7 +229,6 @@ set(INTERFACE_FILES include/criterion/types.h include/criterion/options.h include/criterion/stats.h - include/criterion/theories.h include/criterion/alloc.h include/criterion/parameterized.h include/criterion/redirect.h @@ -227,7 +240,6 @@ set(INTERFACE_FILES include/criterion/internal/asprintf-compat.h include/criterion/internal/designated-initializer-compat.h include/criterion/internal/preprocess.h - include/criterion/internal/theories.h include/criterion/internal/parameterized.h include/criterion/internal/stdio_filebuf.hxx include/criterion/internal/stream.hxx @@ -236,6 +248,13 @@ set(INTERFACE_FILES include/criterion/internal/stdio_filebuf.hxx ) +if (THEORIES) + set(INTERFACE_FILES ${INTERFACE_FILES} + include/criterion/theories.h + include/criterion/internal/theories.h + ) +endif() + # Generate the configure file configure_file( @@ -245,7 +264,11 @@ configure_file( include_directories(include src) add_library(criterion SHARED ${SOURCE_FILES} ${INTERFACE_FILES}) -target_link_libraries(criterion csptr dyncall_s) +target_link_libraries(criterion csptr) + +if (THEORIES) + target_link_libraries(criterion dyncall_s) +endif () if (MSVC) target_link_libraries(criterion wingetopt) diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index e56eeae5..799a7589 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -14,7 +14,6 @@ set(SAMPLES more-suites.c description.c simple.c - theories.c timeout.c redirect.c parameterized.c @@ -31,12 +30,18 @@ if (CMAKE_CXX_COMPILER_WORKS) more-suites.cc description.cc simple.cc - theories.cc redirect.cc parameterized.cc ) endif () +if (THEORIES) + set(SAMPLES ${SAMPLES} theories.c) + if (CMAKE_CXX_COMPILER_WORKS) + set(SAMPLES ${SAMPLES} theories.cc) + endif () +endif () + set(SCRIPTS tap_test xml_test diff --git a/samples/tests/CMakeLists.txt b/samples/tests/CMakeLists.txt index 4a38382e..9432b91e 100644 --- a/samples/tests/CMakeLists.txt +++ b/samples/tests/CMakeLists.txt @@ -3,7 +3,6 @@ set(SAMPLES exit.c long-messages.c other-crashes.c - theories_regression.c ) @@ -13,10 +12,16 @@ if (CMAKE_CXX_COMPILER_WORKS) exit.cc long-messages.cc other-crashes.cc - theories_regression.cc exception.cc ) endif () +if (THEORIES) + set(SAMPLES ${SAMPLES} theories_regression.c) + if (CMAKE_CXX_COMPILER_WORKS) + set(SAMPLES ${SAMPLES} theories_regression.cc) + endif () +endif () + add_samples("${CMAKE_CURRENT_LIST_DIR}" "${SAMPLES}") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 3e7c7476..f23ac22e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -9,9 +9,14 @@ include_directories(../include ../src) set(TEST_SOURCES ordered-set.c - asprintf.c ) +if (THEORIES) + set(TEST_SOURCES ${TEST_SOURCES} + asprintf.c + ) +endif () + if (CMAKE_CXX_COMPILER_WORKS) set(TEST_SOURCES ${TEST_SOURCES} redirect.cc From 2ccbdbd578a6c8ef397d6b5c0c827474bd9b271d Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 28 Nov 2015 14:26:08 +0100 Subject: [PATCH 187/211] Added deb generation rules in cmake module --- .cmake/Modules/DebConfig.cmake | 41 +++ .cmake/Modules/DebSourcePPA.cmake | 347 ++++++++++++++++++++++++++ .cmake/Modules/GettextTranslate.cmake | 2 +- .cmake/Modules/PackageConfig.cmake | 79 ++++++ .cmake/copy-source.sh | 11 + .cmake/git-archive-all.sh | 302 ++++++++++++++++++++++ .gitignore | 2 +- CMakeLists.txt | 14 +- 8 files changed, 795 insertions(+), 3 deletions(-) create mode 100644 .cmake/Modules/DebConfig.cmake create mode 100644 .cmake/Modules/DebSourcePPA.cmake create mode 100644 .cmake/Modules/PackageConfig.cmake create mode 100755 .cmake/copy-source.sh create mode 100755 .cmake/git-archive-all.sh diff --git a/.cmake/Modules/DebConfig.cmake b/.cmake/Modules/DebConfig.cmake new file mode 100644 index 00000000..e8a4c73f --- /dev/null +++ b/.cmake/Modules/DebConfig.cmake @@ -0,0 +1,41 @@ +# build a Debian package for Launchpad +set(CPACK_DEBIAN_PACKAGE_NAME "criterion") +set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") +set(CPACK_DEBIAN_PACKAGE_SECTION "libs") +set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/Snaipe/Criterion") +set(CPACK_DEBIAN_BUILD_DEPENDS + debhelper + cmake + gettext + libpcre3-dev + gcc-4.9 + g++-4.9 + gobjc-4.9 + gnustep-devel +) + +set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/description.txt") + +set(CPACK_DEBIAN_PACKAGE_SOURCE_COPY "${CMAKE_SOURCE_DIR}/.cmake/copy-source.sh") + +set(CPACK_DEBIAN_DISTRIBUTION_NAME ubuntu) +set(CPACK_DEBIAN_DISTRIBUTION_RELEASES precise trusty vivid wily xenial) + +set(DPUT_HOST "snaipewastaken-ppa") +set(DPUT_SNAPSHOT_HOST "snaipewastaken-ppa") +set(CPACK_DEBIAN_PACKAGE_DOCS "") +set(CPACK_DEBIAN_PACKAGE_INSTALL + "/usr/lib/*.so" + "/usr/lib/*.so.*" + "/usr/share/locale/*" +) + +set(CPACK_COMPONENTS_ALL "dev") +set(CPACK_COMPONENT_DEV_DISPLAY_NAME "Criterion library development files") +set(CPACK_COMPONENT_DEV_DESCRIPTION "These are the development files.") +set(CPACK_COMPONENT_DEV_SECTION "devel") + +set(CPACK_COMPONENT_DEV_DOCS "") +set(CPACK_COMPONENT_DEV_INSTALL "/usr/include") + +include (DebSourcePPA) diff --git a/.cmake/Modules/DebSourcePPA.cmake b/.cmake/Modules/DebSourcePPA.cmake new file mode 100644 index 00000000..f948ed5b --- /dev/null +++ b/.cmake/Modules/DebSourcePPA.cmake @@ -0,0 +1,347 @@ +## Debian Source Package Generator +# +# Copyright (c) 2010 Daniel Pfeifer <daniel@pfeifer-mail.de> +# Many modifications by Rosen Diankov <rosen.diankov@gmail.com> +# +# Creates source debian files and manages library dependencies +# +# Features: +# +# - Automatically generates symbols and run-time dependencies from the build dependencies +# - Custom copy of source directory via CPACK_DEBIAN_PACKAGE_SOURCE_COPY +# - Simultaneous output of multiple debian source packages for each distribution +# - Can specificy distribution-specific dependencies by suffixing DEPENDS with _${DISTRO_NAME}, for example: CPACK_DEBIAN_PACKAGE_DEPENDS_LUCID, CPACK_COMPONENT_MYCOMP0_DEPENDS_LUCID +# +# Usage: +# +# set(CPACK_DEBIAN_BUILD_DEPENDS debhelper cmake) +# set(CPACK_DEBIAN_PACKAGE_PRIORITY optional) +# set(CPACK_DEBIAN_PACKAGE_SECTION devel) +# set(CPACK_DEBIAN_CMAKE_OPTIONS "-DMYOPTION=myvalue") +# set(CPACK_DEBIAN_PACKAGE_DEPENDS mycomp0 mycomp1 some_ubuntu_package) +# set(CPACK_DEBIAN_PACKAGE_DEPENDS_UBUNTU_LUCID mycomp0 mycomp1 lucid_specific_package) +# set(CPACK_DEBIAN_PACKAGE_NAME mypackage) +# set(CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES unnecessary_file unnecessary_dir/file0) +# set(CPACK_DEBIAN_PACKAGE_SOURCE_COPY svn export --force) # if using subversion +# set(CPACK_DEBIAN_DISTRIBUTION_NAME ubuntu) +# set(CPACK_DEBIAN_DISTRIBUTION_RELEASES karmic lucid maverick natty) +# set(CPACK_DEBIAN_CHANGELOG " * Extra change log lines") +# set(CPACK_DEBIAN_PACKAGE_SUGGESTS "ipython") +# set(CPACK_COMPONENT_X_RECOMMENDS "recommended-package") +## + +find_program(DEBUILD_EXECUTABLE debuild) +find_program(DPUT_EXECUTABLE dput) + +if(NOT DEBUILD_EXECUTABLE OR NOT DPUT_EXECUTABLE) + return() +endif(NOT DEBUILD_EXECUTABLE OR NOT DPUT_EXECUTABLE) + +# DEBIAN/control +# debian policy enforce lower case for package name +# Package: (mandatory) +IF(NOT CPACK_DEBIAN_PACKAGE_NAME) + STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_DEBIAN_PACKAGE_NAME) +ENDIF(NOT CPACK_DEBIAN_PACKAGE_NAME) + +# Section: (recommended) +IF(NOT CPACK_DEBIAN_PACKAGE_SECTION) + SET(CPACK_DEBIAN_PACKAGE_SECTION "devel") +ENDIF(NOT CPACK_DEBIAN_PACKAGE_SECTION) + +# Priority: (recommended) +IF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY) + SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") +ENDIF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY) + +file(STRINGS ${CPACK_PACKAGE_DESCRIPTION_FILE} DESC_LINES) +foreach(LINE ${DESC_LINES}) + set(DEB_LONG_DESCRIPTION "${DEB_LONG_DESCRIPTION} ${LINE}\n") +endforeach(LINE ${DESC_LINES}) + +file(REMOVE_RECURSE "${CMAKE_BINARY_DIR}/Debian") +file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/Debian") +set(DEBIAN_SOURCE_ORIG_DIR "${CMAKE_BINARY_DIR}/Debian/${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") + +if( CPACK_DEBIAN_PACKAGE_SOURCE_COPY ) + execute_process(COMMAND ${CPACK_DEBIAN_PACKAGE_SOURCE_COPY} "${CMAKE_SOURCE_DIR}" "${DEBIAN_SOURCE_ORIG_DIR}.orig") +else() + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR} "${DEBIAN_SOURCE_ORIG_DIR}.orig") + execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${DEBIAN_SOURCE_ORIG_DIR}.orig/.git") + execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${DEBIAN_SOURCE_ORIG_DIR}.orig/.svn") +endif() + +# remove unnecessary folders +foreach(REMOVE_DIR ${CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES}) + file(REMOVE_RECURSE ${DEBIAN_SOURCE_ORIG_DIR}.orig/${REMOVE_DIR}) +endforeach() + +# create the original source tar +execute_process(COMMAND ${CMAKE_COMMAND} -E tar czf "${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.orig.tar.gz" "${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.orig" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Debian) + +set(DEB_SOURCE_CHANGES) +foreach(RELEASE ${CPACK_DEBIAN_DISTRIBUTION_RELEASES}) + set(DEBIAN_SOURCE_DIR "${DEBIAN_SOURCE_ORIG_DIR}-${CPACK_DEBIAN_DISTRIBUTION_NAME}1~${RELEASE}1") + set(RELEASE_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_DISTRIBUTION_NAME}1~${RELEASE}1") + string(TOUPPER ${RELEASE} RELEASE_UPPER) + string(TOUPPER ${CPACK_DEBIAN_DISTRIBUTION_NAME} DISTRIBUTION_NAME_UPPER) + file(MAKE_DIRECTORY ${DEBIAN_SOURCE_DIR}/debian) + ############################################################################## + # debian/control + set(DEBIAN_CONTROL ${DEBIAN_SOURCE_DIR}/debian/control) + file(WRITE ${DEBIAN_CONTROL} + "Source: ${CPACK_DEBIAN_PACKAGE_NAME}\n" + "Section: ${CPACK_DEBIAN_PACKAGE_SECTION}\n" + "Priority: ${CPACK_DEBIAN_PACKAGE_PRIORITY}\n" + "DM-Upload-Allowed: yes\n" + "Maintainer: ${CPACK_PACKAGE_CONTACT}\n" + "Build-Depends: " + ) + + if( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + else( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + if( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) + else( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_BUILD_DEPENDS}) + endif( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) + endif( CPACK_DEBIAN_BUILD_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + + + file(APPEND ${DEBIAN_CONTROL} "\n" + "Standards-Version: 3.8.4\n" + "Homepage: ${CPACK_PACKAGE_VENDOR}\n" + "\n" + "Package: ${CPACK_DEBIAN_PACKAGE_NAME}\n" + "Architecture: any\n" + "Depends: " + ) + + if( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + else( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + if( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) + else( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_PACKAGE_DEPENDS}) + endif( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) + endif( CPACK_DEBIAN_PACKAGE_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + + file(APPEND ${DEBIAN_CONTROL} "\nRecommends: ") + if( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + else( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + if( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) + else( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_PACKAGE_RECOMMENDS}) + endif( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) + endif( CPACK_DEBIAN_PACKAGE_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + + file(APPEND ${DEBIAN_CONTROL} "\nSuggests: ") + if( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + else( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + if( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) + else( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS}) + file(APPEND ${DEBIAN_CONTROL} "${DEP}, ") + endforeach(DEP ${CPACK_DEBIAN_PACKAGE_SUGGESTS}) + endif( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) + endif( CPACK_DEBIAN_PACKAGE_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + + file(APPEND ${DEBIAN_CONTROL} "\n" + "Description: ${CPACK_PACKAGE_DISPLAY_NAME} ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}\n" + "${DEB_LONG_DESCRIPTION}" + ) + + foreach(COMPONENT ${CPACK_COMPONENTS_ALL}) + string(TOUPPER ${COMPONENT} UPPER_COMPONENT) + set(DEPENDS "\${shlibs:Depends}") + if( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + set(DEPENDS "${DEPENDS}, ${DEP}") + endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + else( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + if( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) + set(DEPENDS "${DEPENDS}, ${DEP}") + endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}}) + else( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS}) + set(DEPENDS "${DEPENDS}, ${DEP}") + endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS}) + endif( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER} ) + endif( CPACK_COMPONENT_${UPPER_COMPONENT}_DEPENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + + set(RECOMMENDS) + if( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + set(RECOMMENDS "${RECOMMENDS} ${DEP}, ") + endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + else( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + if( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) + set(RECOMMENDS "${RECOMMENDS} ${DEP}, ") + endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}}) + else( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS}) + set(RECOMMENDS "${RECOMMENDS} ${DEP}, ") + endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS}) + endif( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER} ) + endif( CPACK_COMPONENT_${UPPER_COMPONENT}_RECOMMENDS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + + set(SUGGESTS) + if( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + set(SUGGESTS "${SUGGESTS} ${DEP}, ") + endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER}}) + else( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + if( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) + set(SUGGESTS "${SUGGESTS} ${DEP}, ") + endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}}) + else( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) + foreach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS}) + set(SUGGESTS "${SUGGESTS} ${DEP}, ") + endforeach(DEP ${CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS}) + endif( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER} ) + endif( CPACK_COMPONENT_${UPPER_COMPONENT}_SUGGESTS_${DISTRIBUTION_NAME_UPPER}_${RELEASE_UPPER} ) + + file(APPEND ${DEBIAN_CONTROL} "\n" + "Package: ${CPACK_DEBIAN_PACKAGE_NAME}-${COMPONENT}\n" + "Architecture: any\n" + "Depends: ${DEPENDS}\n" + "Recommends: ${RECOMMENDS}\n" + "Suggests: ${SUGGESTS}\n" + "Description: ${CPACK_PACKAGE_DISPLAY_NAME} ${CPACK_COMPONENT_${UPPER_COMPONENT}_DISPLAY_NAME}\n" + "${DEB_LONG_DESCRIPTION}" + " .\n" + " ${CPACK_COMPONENT_${UPPER_COMPONENT}_DESCRIPTION}\n" + ) + endforeach(COMPONENT ${CPACK_COMPONENTS_ALL}) + + ############################################################################## + # debian/copyright + set(DEBIAN_COPYRIGHT ${DEBIAN_SOURCE_DIR}/debian/copyright) + execute_process(COMMAND ${CMAKE_COMMAND} -E + copy ${CPACK_RESOURCE_FILE_LICENSE} ${DEBIAN_COPYRIGHT} + ) + + ############################################################################## + # debian/rules + set(DEBIAN_RULES ${DEBIAN_SOURCE_DIR}/debian/rules) + file(WRITE ${DEBIAN_RULES} + "#!/usr/bin/make -f\n" + "\n" + "BUILDDIR = build_dir\n" + "\n" + "build:\n" + " mkdir $(BUILDDIR)\n" + " cd $(BUILDDIR); cmake -DCMAKE_BUILD_TYPE=Release ${CPACK_DEBIAN_CMAKE_OPTIONS} -DCMAKE_INSTALL_PREFIX=/usr ..\n" + " $(MAKE) -C $(BUILDDIR) preinstall\n" + " touch build\n" + "\n" + "binary: binary-indep binary-arch\n" + "\n" + "binary-indep: build\n" + "\n" + "binary-arch: build\n" + " cd $(BUILDDIR); cmake -DCOMPONENT=Unspecified -DCMAKE_INSTALL_PREFIX=../debian/tmp/usr -P cmake_install.cmake\n" + " mkdir -p debian/tmp/DEBIAN\n" + " dpkg-gensymbols -p${CPACK_DEBIAN_PACKAGE_NAME}\n" + ) + + foreach(COMPONENT ${CPACK_COMPONENTS_ALL}) + set(PATH debian/${COMPONENT}) + file(APPEND ${DEBIAN_RULES} + " cd $(BUILDDIR); cmake -DCOMPONENT=${COMPONENT} -DCMAKE_INSTALL_PREFIX=../${PATH}/usr -P cmake_install.cmake\n" + " mkdir -p ${PATH}/DEBIAN\n" + " dpkg-gensymbols -p${CPACK_DEBIAN_PACKAGE_NAME}-${COMPONENT} -P${PATH}\n" + ) + endforeach(COMPONENT ${CPACK_COMPONENTS_ALL}) + + file(APPEND ${DEBIAN_RULES} + " dh_shlibdeps\n" + " dh_strip\n" # for reducing size + " dpkg-gencontrol -p${CPACK_DEBIAN_PACKAGE_NAME}\n" + " dpkg --build debian/tmp ..\n" + ) + + foreach(COMPONENT ${CPACK_COMPONENTS_ALL}) + set(PATH debian/${COMPONENT}) + file(APPEND ${DEBIAN_RULES} + " dpkg-gencontrol -p${CPACK_DEBIAN_PACKAGE_NAME}-${COMPONENT} -P${PATH} -Tdebian/${COMPONENT}.substvars\n" + " dpkg --build ${PATH} ..\n" + ) + endforeach(COMPONENT ${CPACK_COMPONENTS_ALL}) + + file(APPEND ${DEBIAN_RULES} + "\n" + "clean:\n" + " rm -f build\n" + " rm -rf $(BUILDDIR)\n" + "\n" + ".PHONY: binary binary-arch binary-indep clean\n" + ) + + execute_process(COMMAND chmod +x ${DEBIAN_RULES}) + + ############################################################################## + # debian/compat + file(WRITE ${DEBIAN_SOURCE_DIR}/debian/compat "7") + + ############################################################################## + # debian/source/format + file(WRITE ${DEBIAN_SOURCE_DIR}/debian/source/format "3.0 (quilt)") + + ############################################################################## + # debian/changelog + set(DEBIAN_CHANGELOG ${DEBIAN_SOURCE_DIR}/debian/changelog) + execute_process(COMMAND date -R OUTPUT_VARIABLE DATE_TIME) + file(WRITE ${DEBIAN_CHANGELOG} + "${CPACK_DEBIAN_PACKAGE_NAME} (${RELEASE_PACKAGE_VERSION}) ${RELEASE}; urgency=medium\n\n" + " * Package built with CMake\n\n" + "${CPACK_DEBIAN_CHANGELOG}" + " -- ${CPACK_PACKAGE_CONTACT} ${DATE_TIME}" + ) + + ############################################################################## + # debuild -S + if( DEB_SOURCE_CHANGES ) + set(DEBUILD_OPTIONS "-sd") + else() + set(DEBUILD_OPTIONS "-sa") + endif() + set(SOURCE_CHANGES_FILE "${CPACK_DEBIAN_PACKAGE_NAME}_${RELEASE_PACKAGE_VERSION}_source.changes") + set(DEB_SOURCE_CHANGES ${DEB_SOURCE_CHANGES} "${SOURCE_CHANGES_FILE}") + add_custom_command(OUTPUT "${SOURCE_CHANGES_FILE}" COMMAND ${DEBUILD_EXECUTABLE} -S ${DEBUILD_OPTIONS} WORKING_DIRECTORY ${DEBIAN_SOURCE_DIR}) +endforeach(RELEASE ${CPACK_DEBIAN_DISTRIBUTION_RELEASES}) + +############################################################################## +# dput ppa:your-lp-id/ppa <source.changes> +add_custom_target(dput ${DPUT_EXECUTABLE} ${DPUT_HOST} ${DEB_SOURCE_CHANGES} DEPENDS ${DEB_SOURCE_CHANGES} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/Debian) diff --git a/.cmake/Modules/GettextTranslate.cmake b/.cmake/Modules/GettextTranslate.cmake index 02307ff0..4c42ef47 100644 --- a/.cmake/Modules/GettextTranslate.cmake +++ b/.cmake/Modules/GettextTranslate.cmake @@ -287,7 +287,7 @@ macro(GettextTranslate) add_dependencies(${PO_TARGET} ${MAKEVAR_DOMAIN}.pot-update) install(FILES ${GMO_FILE_NAME} DESTINATION - ${LOCALEDIR}/${lang}/LC_MESSAGES + ${LOCALEDIR_REL}/${lang}/LC_MESSAGES RENAME ${MAKEVAR_DOMAIN}.mo ) diff --git a/.cmake/Modules/PackageConfig.cmake b/.cmake/Modules/PackageConfig.cmake new file mode 100644 index 00000000..632d9b8a --- /dev/null +++ b/.cmake/Modules/PackageConfig.cmake @@ -0,0 +1,79 @@ + +function(extract_version version major minor patch extra) + string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)?" version_valid ${version}) + if(version_valid) + string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)?" "\\1;\\2;\\3;\\4" VERSION_MATCHES ${version}) + list(GET VERSION_MATCHES 0 version_major) + set(${major} ${version_major} PARENT_SCOPE) + list(GET VERSION_MATCHES 1 version_minor) + set(${minor} ${version_minor} PARENT_SCOPE) + list(GET VERSION_MATCHES 2 version_patch) + set(${patch} ${version_patch} PARENT_SCOPE) + list(GET VERSION_MATCHES 3 version_extra) + set(${extra} ${version_extra} PARENT_SCOPE) + else(version_valid) + message(AUTHOR_WARNING "Bad version ${version}; falling back to 0 (have you made an initial release?)") + set(${major} "0" PARENT_SCOPE) + set(${minor} "" PARENT_SCOPE) + set(${patch} "" PARENT_SCOPE) + set(${extra} "" PARENT_SCOPE) + endif(version_valid) +endfunction(extract_version) + +if (WIN32) + set(CPACK_GENERATOR "ZIP") + set(CPACK_SOURCE_GENERATOR "ZIP") +else () + set(CPACK_GENERATOR "TGZ") + set(CPACK_SOURCE_GENERATOR "TGZ") +endif () + +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A KISS, modern unit testing framework for C and C++.") +set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-binary-${PROJECT_VERSION}") +set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}") +set(CPACK_PACKAGE_VENDOR "Franklin \"Snaipe\" Mathieu") +set(CPACK_PACKAGE_CONTACT "Franklin \"Snaipe\" Mathieu <franklinmathieu@gmail.com>") +set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") + +if (WIN32) + # add snapshot specific versioning information + if (CPACK_DEBIAN_PACKAGE_TYPE STREQUAL "snapshot") + execute_process(COMMAND date +%Y%m%d%0k%0M%0S%z OUTPUT_VARIABLE SNAPSHOT_DATE_TIME) + set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}-snapshot-${SNAPSHOT_DATE_TIME}") + STRING(REPLACE "\n" "" CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}) + endif () +endif () + +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/debian.copyright") +extract_version(${PROJECT_VERSION} + CPACK_PACKAGE_VERSION_MAJOR + CPACK_PACKAGE_VERSION_MINOR + CPACK_PACKAGE_VERSION_PATCH + VERSION_EXTRA +) + +set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) + +file(GLOB TRASH_FILES "${CMAKE_SOURCE_DIR}/*") +set(KEEP_FILES + "${CMAKE_SOURCE_DIR}/.cmake" + "${CMAKE_SOURCE_DIR}/src" + "${CMAKE_SOURCE_DIR}/include" + "${CMAKE_SOURCE_DIR}/doc" + "${CMAKE_SOURCE_DIR}/dev" + "${CMAKE_SOURCE_DIR}/po" + "${CMAKE_SOURCE_DIR}/dependencies" + "${CMAKE_SOURCE_DIR}/CMakeLists.txt" + "${CMAKE_SOURCE_DIR}/README.md" + "${CMAKE_SOURCE_DIR}/CONTRIBUTING.md" + "${CMAKE_SOURCE_DIR}/LICENSE" + "${CMAKE_SOURCE_DIR}/ChangeLog" + "${CMAKE_SOURCE_DIR}/description.txt" +) +list(REMOVE_ITEM TRASH_FILES ${KEEP_FILES}) +# Escape any '.' characters +string(REPLACE "." "\\\\." TRASH_FILES "${TRASH_FILES}") +set(CPACK_SOURCE_IGNORE_FILES "${TRASH_FILES}") + +include(CPack) diff --git a/.cmake/copy-source.sh b/.cmake/copy-source.sh new file mode 100755 index 00000000..fc562c62 --- /dev/null +++ b/.cmake/copy-source.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +CURDIR=$(dirname $0) +SOURCE_DIR=$1; shift +DEST_DIR=$1; shift + +( + cd "$SOURCE_DIR" + mkdir -p "$DEST_DIR" + "$CURDIR/git-archive-all.sh" --format tar -- - | tar -x -C "$DEST_DIR" +) diff --git a/.cmake/git-archive-all.sh b/.cmake/git-archive-all.sh new file mode 100755 index 00000000..9a17eece --- /dev/null +++ b/.cmake/git-archive-all.sh @@ -0,0 +1,302 @@ +#!/bin/bash - +# +# File: git-archive-all.sh +# +# Description: A utility script that builds an archive file(s) of all +# git repositories and submodules in the current path. +# Useful for creating a single tarfile of a git super- +# project that contains other submodules. +# +# Examples: Use git-archive-all.sh to create archive distributions +# from git repositories. To use, simply do: +# +# cd $GIT_DIR; git-archive-all.sh +# +# where $GIT_DIR is the root of your git superproject. +# +# License: GPL3+ +# +############################################################################### +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +############################################################################### + +# DEBUGGING +set -e +set -C # noclobber + +# TRAP SIGNALS +trap 'cleanup' QUIT EXIT + +# For security reasons, explicitly set the internal field separator +# to newline, space, tab +OLD_IFS=$IFS +IFS=' + ' + +function cleanup () { + rm -f $TMPFILE + rm -f $TOARCHIVE + IFS="$OLD_IFS" +} + +function usage () { + echo "Usage is as follows:" + echo + echo "$PROGRAM <--version>" + echo " Prints the program version number on a line by itself and exits." + echo + echo "$PROGRAM <--usage|--help|-?>" + echo " Prints this usage output and exits." + echo + echo "$PROGRAM [--format <fmt>] [--prefix <path>] [--verbose|-v] [--separate|-s]" + echo " [--tree-ish|-t <tree-ish>] [output_file]" + echo " Creates an archive for the entire git superproject, and its submodules" + echo " using the passed parameters, described below." + echo + echo " If '--format' is specified, the archive is created with the named" + echo " git archiver backend. Obviously, this must be a backend that git archive" + echo " understands. The format defaults to 'tar' if not specified." + echo + echo " If '--prefix' is specified, the archive's superproject and all submodules" + echo " are created with the <path> prefix named. The default is to not use one." + echo + echo " If '--separate' or '-s' is specified, individual archives will be created" + echo " for each of the superproject itself and its submodules. The default is to" + echo " concatenate individual archives into one larger archive." + echo + echo " If '--tree-ish' is specified, the archive will be created based on whatever" + echo " you define the tree-ish to be. Branch names, commit hash, etc. are acceptable." + echo " Defaults to HEAD if not specified. See git archive's documentation for more" + echo " information on what a tree-ish is." + echo + echo " If 'output_file' is specified, the resulting archive is created as the" + echo " file named. This parameter is essentially a path that must be writeable." + echo " When combined with '--separate' ('-s') this path must refer to a directory." + echo " Without this parameter or when combined with '--separate' the resulting" + echo " archive(s) are named with a dot-separated path of the archived directory and" + echo " a file extension equal to their format (e.g., 'superdir.submodule1dir.tar')." + echo + echo " The special value '-' (single dash) is treated as STDOUT and, when used, the" + echo " --separate option is ignored. Use a double-dash to separate the outfile from" + echo " the value of previous options. For example, to write a .zip file to STDOUT:" + echo + echo " ./$PROGRAM --format zip -- -" + echo + echo " If '--verbose' or '-v' is specified, progress will be printed." +} + +function version () { + echo "$PROGRAM version $VERSION" +} + +# Internal variables and initializations. +readonly PROGRAM=`basename "$0"` +readonly VERSION=0.3 + +SEPARATE=0 +VERBOSE=0 + +TARCMD=`command -v gnutar || command -v tar` +FORMAT=tar +PREFIX= +TREEISH=HEAD + +# RETURN VALUES/EXIT STATUS CODES +readonly E_BAD_OPTION=254 +readonly E_UNKNOWN=255 + +# Process command-line arguments. +while test $# -gt 0; do + if [ x"$1" == x"--" ]; then + # detect argument termination + shift + break + fi + case $1 in + --format ) + shift + FORMAT="$1" + shift + ;; + + --prefix ) + shift + PREFIX="$1" + shift + ;; + + --separate | -s ) + shift + SEPARATE=1 + ;; + + --tree-ish | -t ) + shift + TREEISH="$1" + shift + ;; + + --version ) + version + exit + ;; + + --verbose | -v ) + shift + VERBOSE=1 + ;; + + -? | --usage | --help ) + usage + exit + ;; + + -* ) + echo "Unrecognized option: $1" >&2 + usage + exit $E_BAD_OPTION + ;; + + * ) + break + ;; + esac +done + +OLD_PWD="`pwd`" +TMPDIR=${TMPDIR:-/tmp} +TMPFILE=`mktemp "$TMPDIR/$PROGRAM.XXXXXX"` # Create a place to store our work's progress +TOARCHIVE=`mktemp "$TMPDIR/$PROGRAM.toarchive.XXXXXX"` +OUT_FILE=$OLD_PWD # assume "this directory" without a name change by default + +if [ ! -z "$1" ]; then + OUT_FILE="$1" + if [ "-" == $OUT_FILE ]; then + SEPARATE=0 + fi + shift +fi + +# Validate parameters; error early, error often. +if [ "-" == $OUT_FILE -o $SEPARATE -ne 1 ] && [ "$FORMAT" == "tar" -a `$TARCMD --help | grep -q -- "--concatenate"; echo $?` -ne 0 ]; then + echo "Your 'tar' does not support the '--concatenate' option, which we need" + echo "to produce a single tarfile. Either install a compatible tar (such as" + echo "gnutar), or invoke $PROGRAM with the '--separate' option." + exit +elif [ $SEPARATE -eq 1 -a ! -d $OUT_FILE ]; then + echo "When creating multiple archives, your destination must be a directory." + echo "If it's not, you risk being surprised when your files are overwritten." + exit +elif [ `git config -l | grep -q '^core\.bare=false'; echo $?` -ne 0 ]; then + echo "$PROGRAM must be run from a git working copy (i.e., not a bare repository)." + exit +fi + +# Create the superproject's git-archive +if [ $VERBOSE -eq 1 ]; then + echo -n "creating superproject archive..." +fi +git archive --format=$FORMAT --prefix="$PREFIX" $TREEISH > $TMPDIR/$(basename "$(pwd)").$FORMAT +if [ $VERBOSE -eq 1 ]; then + echo "done" +fi +echo $TMPDIR/$(basename "$(pwd)").$FORMAT >| $TMPFILE # clobber on purpose +superfile=`head -n 1 $TMPFILE` + +if [ $VERBOSE -eq 1 ]; then + echo -n "looking for subprojects..." +fi +# find all '.git' dirs, these show us the remaining to-be-archived dirs +# we only want directories that are below the current directory +find . -mindepth 2 -name '.git' -type d -print | sed -e 's/^\.\///' -e 's/\.git$//' >> $TOARCHIVE +# as of version 1.7.8, git places the submodule .git directories under the superprojects .git dir +# the submodules get a .git file that points to their .git dir. we need to find all of these too +find . -mindepth 2 -name '.git' -type f -print | xargs grep -l "gitdir" | sed -e 's/^\.\///' -e 's/\.git$//' >> $TOARCHIVE +if [ $VERBOSE -eq 1 ]; then + echo "done" + echo " found:" + cat $TOARCHIVE | while read arch + do + echo " $arch" + done +fi + +if [ $VERBOSE -eq 1 ]; then + echo -n "archiving submodules..." +fi +while read path; do + TREEISH=$(git submodule | grep "^ .*${path%/} " | cut -d ' ' -f 2) # git submodule does not list trailing slashes in $path + cd "$path" + git archive --format=$FORMAT --prefix="${PREFIX}$path" ${TREEISH:-HEAD} > "$TMPDIR"/"$(echo "$path" | sed -e 's/\//./g')"$FORMAT + if [ $FORMAT == 'zip' ]; then + # delete the empty directory entry; zipped submodules won't unzip if we don't do this + zip -d "$(tail -n 1 $TMPFILE)" "${PREFIX}${path%/}" >/dev/null # remove trailing '/' + fi + echo "$TMPDIR"/"$(echo "$path" | sed -e 's/\//./g')"$FORMAT >> $TMPFILE + cd "$OLD_PWD" +done < $TOARCHIVE +if [ $VERBOSE -eq 1 ]; then + echo "done" +fi + +if [ $VERBOSE -eq 1 ]; then + echo -n "concatenating archives into single archive..." +fi +# Concatenate archives into a super-archive. +if [ $SEPARATE -eq 0 -o "-" == $OUT_FILE ]; then + if [ $FORMAT == 'tar.gz' ]; then + gunzip $superfile + superfile=${superfile:0: -3} # Remove '.gz' + sed -e '1d' $TMPFILE | while read file; do + gunzip $file + file=${file:0: -3} + $TARCMD --concatenate -f "$superfile" "$file" && rm -f "$file" + done + gzip $superfile + superfile=$superfile.gz + elif [ $FORMAT == 'tar' ]; then + sed -e '1d' $TMPFILE | while read file; do + $TARCMD --concatenate -f "$superfile" "$file" && rm -f "$file" + done + elif [ $FORMAT == 'zip' ]; then + sed -e '1d' $TMPFILE | while read file; do + # zip incorrectly stores the full path, so cd and then grow + cd `dirname "$file"` + zip -g "$superfile" `basename "$file"` && rm -f "$file" + done + cd "$OLD_PWD" + fi + + echo "$superfile" >| $TMPFILE # clobber on purpose +fi +if [ $VERBOSE -eq 1 ]; then + echo "done" +fi + +if [ $VERBOSE -eq 1 ]; then + echo -n "moving archive to $OUT_FILE..." +fi +while read file; do + if [ "-" == $OUT_FILE ]; then + cat "$file" && rm -f "$file" + else + mv "$file" "$OUT_FILE" + fi +done < $TMPFILE +if [ $VERBOSE -eq 1 ]; then + echo "done" +fi diff --git a/.gitignore b/.gitignore index 007b88d8..dc27c604 100644 --- a/.gitignore +++ b/.gitignore @@ -17,7 +17,7 @@ !*.rst !*.po !*.in -!.cmake/*.cmake +!.cmake/Modules/*.cmake !samples/tests/*.sh !samples/**/*.expected diff --git a/CMakeLists.txt b/CMakeLists.txt index 21356c0f..7abd623d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,8 @@ endif() # Project setup & environment variables set(PROJECT_VERSION "2.1.0") -set(LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale) +set(LOCALEDIR_REL "share/locale") +set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/${LOCALEDIR_REL}") set(GettextTranslate_ALL 1) set(GettextTranslate_GMO_BINARY 1) @@ -316,3 +317,14 @@ enable_testing() add_subdirectory(samples) add_subdirectory(test) endif () + +# Add toolchain patch number for incremental deb builds +set(PROJECT_VERSION "${PROJECT_VERSION}-4") + +include (PackageConfig) + +option(UPLOAD_DEB "Upload package to launchpad" OFF) + +if (UNIX AND UPLOAD_DEB) + include (DebConfig) +endif () From ba21d658ca117de958e96bbeea0f28c9c179884d Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 28 Nov 2015 14:33:09 +0100 Subject: [PATCH 188/211] Added missing files for ppa builds --- CMakeLists.txt | 2 +- debian.copyright | 25 +++++++++++++++++++++++++ description.txt | 23 +++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 debian.copyright create mode 100644 description.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 7abd623d..af6bc1bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -319,7 +319,7 @@ add_subdirectory(test) endif () # Add toolchain patch number for incremental deb builds -set(PROJECT_VERSION "${PROJECT_VERSION}-4") +set(PROJECT_VERSION "${PROJECT_VERSION}-5") include (PackageConfig) diff --git a/debian.copyright b/debian.copyright new file mode 100644 index 00000000..6f6dc399 --- /dev/null +++ b/debian.copyright @@ -0,0 +1,25 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Criterion +Upstream-Contact: Franklin "Snaipe" Mathieu <franklinmathieu@gmail.com> +Source: http://github.com/Snaipe/Criterion + +Files: * +Copyright: 2015, Franklin "Snaipe" Mathieu <franklinmathieu@gmail.com> +License: MIT + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. diff --git a/description.txt b/description.txt new file mode 100644 index 00000000..e249add8 --- /dev/null +++ b/description.txt @@ -0,0 +1,23 @@ +Criterion is a dead-simple, yet extensible, C and C++ unit testing framework. + +Most test frameworks for C require a lot of boilerplate code to +set up tests and test suites -- you need to create a main, +then register new test suites, then register the tests within +these suits, and finally call the right functions. + +This gives the user great control, at the unfortunate cost of simplicity. + +Criterion follows the KISS principle, while keeping the control +the user would have with other frameworks: + +* C99 and C++11 compatible. +* Tests are automatically registered when declared. +* Implements a xUnit framework structure. +* A default entry point is provided, no need to declare a main + unless you want to do special handling. +* Test are isolated in their own process, crashes and signals can be + reported and tested. +* Unified interface between C and C++: include the criterion header and it *just* works. +* Supports parameterized tests and theories. +* Progress and statistics can be followed in real time with report hooks. +* TAP output format can be enabled with an option. From 689eee1545d757cc86057de45d39fccbfd34cc61 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 28 Nov 2015 14:36:15 +0100 Subject: [PATCH 189/211] Removed unused deb dependencies and activated objective c support on deb builds --- .cmake/Modules/DebConfig.cmake | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.cmake/Modules/DebConfig.cmake b/.cmake/Modules/DebConfig.cmake index e8a4c73f..83e48a7a 100644 --- a/.cmake/Modules/DebConfig.cmake +++ b/.cmake/Modules/DebConfig.cmake @@ -8,12 +8,14 @@ set(CPACK_DEBIAN_BUILD_DEPENDS cmake gettext libpcre3-dev - gcc-4.9 - g++-4.9 - gobjc-4.9 + gobjc gnustep-devel ) +set(CPACK_DEBIAN_CMAKE_OPTIONS + "-DLANG_OBJC=ON" +) + set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/description.txt") set(CPACK_DEBIAN_PACKAGE_SOURCE_COPY "${CMAKE_SOURCE_DIR}/.cmake/copy-source.sh") From 503f9e28969cb3f0214b6616739b814f9936e2af Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 29 Nov 2015 00:33:58 +0100 Subject: [PATCH 190/211] Properly set up cmake install components --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index af6bc1bb..d95bb84f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -294,13 +294,13 @@ endif() foreach (F ${INTERFACE_FILES}) get_filename_component(DEST "${F}" PATH) - install(FILES "${F}" DESTINATION "${DEST}") + install(FILES "${F}" DESTINATION "${DEST}" COMPONENT dev) endforeach () install(TARGETS criterion RUNTIME DESTINATION bin LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib + ARCHIVE DESTINATION lib COMPONENT dev ) add_custom_target(criterion_tests) @@ -319,7 +319,7 @@ add_subdirectory(test) endif () # Add toolchain patch number for incremental deb builds -set(PROJECT_VERSION "${PROJECT_VERSION}-5") +set(PROJECT_VERSION "${PROJECT_VERSION}-6") include (PackageConfig) From 30f2982423b6abd5bedbdec1d40666e304aedc2d Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 30 Nov 2015 10:29:40 +0100 Subject: [PATCH 191/211] Fixed main not cleaning up on special CLI actions --- doc/internal.rst | 7 +++---- src/entry/entry.c | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/doc/internal.rst b/doc/internal.rst index f1296282..8330590e 100644 --- a/doc/internal.rst +++ b/doc/internal.rst @@ -66,10 +66,9 @@ Example main int main(int argc, char *argv[]) { struct criterion_test_set *tests = criterion_initialize(); - if (!criterion_handle_args(argc, argv, true)) - return 0; - - int result = !criterion_run_all_tests(set); + int result = 0; + if (criterion_handle_args(argc, argv, true)) + result = !criterion_run_all_tests(set); criterion_finalize(set); return result; diff --git a/src/entry/entry.c b/src/entry/entry.c index 25301b11..2e57189f 100644 --- a/src/entry/entry.c +++ b/src/entry/entry.c @@ -26,10 +26,9 @@ CR_API int main(int argc, char *argv[]) { struct criterion_test_set *tests = criterion_initialize(); - if (!criterion_handle_args(argc, argv, true)) - return 0; - - int result = !criterion_run_all_tests(tests); + int result = 0; + if (criterion_handle_args(argc, argv, true)) + result = !criterion_run_all_tests(tests); criterion_finalize(tests); From 214bd95a62aeafa5fc6cc4936004dc1fe450a731 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Fri, 4 Dec 2015 18:44:46 +0100 Subject: [PATCH 192/211] [Issue #83] Added single test execution mode --- src/compat/pipe.c | 22 ++++++++++++++++++++++ src/compat/pipe.h | 2 ++ src/core/runner.c | 21 +++++++++++++++++++++ src/core/runner.h | 2 ++ src/entry/params.c | 2 ++ 5 files changed, 49 insertions(+) diff --git a/src/compat/pipe.c b/src/compat/pipe.c index 30a3ef12..1c05a201 100644 --- a/src/compat/pipe.c +++ b/src/compat/pipe.c @@ -318,3 +318,25 @@ static s_pipe_handle stdin_redir_; s_pipe_handle *stdout_redir = &stdout_redir_; s_pipe_handle *stderr_redir = &stderr_redir_; s_pipe_handle *stdin_redir = &stdin_redir_; + +s_pipe_file_handle *pipe_file_open(const char *path) { + s_pipe_file_handle *h = smalloc( + .size = sizeof (s_pipe_file_handle), + .dtor = close_pipe_file_handle); +#ifdef VANILLA_WIN32 + if (!path) + path = "nul"; + h->fh = CreateFile(path, + GENERIC_READ | GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); +#else + if (!path) + path = "/dev/null"; + h->fd = open(path, O_RDWR); +#endif + return h; +} diff --git a/src/compat/pipe.h b/src/compat/pipe.h index d0e162d6..67999826 100644 --- a/src/compat/pipe.h +++ b/src/compat/pipe.h @@ -79,4 +79,6 @@ extern s_pipe_handle *stdout_redir; extern s_pipe_handle *stderr_redir; extern s_pipe_handle *stdin_redir; +s_pipe_file_handle *pipe_file_open(const char *path); + #endif /* !PIPE_H_ */ diff --git a/src/core/runner.c b/src/core/runner.c index d5c6a003..79dedb33 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -488,3 +488,24 @@ int criterion_run_all_tests(struct criterion_test_set *set) { return criterion_options.always_succeed || res; } + +void run_single_test_by_name(const char *testname) { + struct criterion_test_set *set = criterion_init(); + + g_event_pipe = pipe_file_open(NULL); + + FOREACH_SET(struct criterion_suite_set *s, set->suites) { + size_t tests = s->tests ? s->tests->size : 0; + if (!tests) + continue; + + FOREACH_SET(struct criterion_test *t, s->tests) { + char name[1024]; + snprintf(name, sizeof (name), "%s::%s", s->suite.name, t->name); + if (!strncmp(name, testname, 1024)) + run_test_child(t, &s->suite); + } + } + + sfree(set); +} diff --git a/src/core/runner.h b/src/core/runner.h index 0eafbb78..49039bf2 100644 --- a/src/core/runner.h +++ b/src/core/runner.h @@ -43,4 +43,6 @@ void run_test_child(struct criterion_test *test, struct criterion_suite *suite); Suite < (struct criterion_suite**) GET_SECTION_END(cr_sts); \ ++Suite) +void run_single_test_by_name(const char *testname); + #endif /* !CRITERION_RUNNER_H_ */ diff --git a/src/entry/params.c b/src/entry/params.c index 5d71a688..a6dc8a09 100644 --- a/src/entry/params.c +++ b/src/entry/params.c @@ -149,6 +149,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { {"jobs", required_argument, 0, 'j'}, {"fail-fast", no_argument, 0, 'f'}, {"short-filename", no_argument, 0, 'S'}, + {"single", required_argument, 0, 's'}, #ifdef HAVE_PCRE {"pattern", required_argument, 0, 'p'}, #endif @@ -245,6 +246,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) { case 'j': criterion_options.jobs = atou(optarg); break; case 'f': criterion_options.fail_fast = true; break; case 'S': criterion_options.short_filename = true; break; + case 's': run_single_test_by_name(optarg); return 0; #ifdef HAVE_PCRE case 'p': criterion_options.pattern = optarg; break; #endif From 30c3afedda190e4ad39794eafa4b50a3642c04bc Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 5 Dec 2015 01:37:58 +0100 Subject: [PATCH 193/211] Added first tentative to decouple the wrappers from the library --- CMakeLists.txt | 8 --- include/criterion/criterion.h | 3 + include/criterion/internal/test.h | 90 +++++++++++++++++++++++++- src/core/runner.c | 23 ++++--- src/core/{wrappers/wrap.c => test.c} | 33 +++++++--- src/core/wrappers/wrap.cc | 92 -------------------------- src/core/wrappers/wrap.h | 44 ------------- src/core/wrappers/wrap.m | 96 ---------------------------- src/core/wrappers/wrappers.c | 45 ------------- 9 files changed, 126 insertions(+), 308 deletions(-) rename src/core/{wrappers/wrap.c => test.c} (71%) delete mode 100644 src/core/wrappers/wrap.cc delete mode 100644 src/core/wrappers/wrap.h delete mode 100644 src/core/wrappers/wrap.m delete mode 100644 src/core/wrappers/wrappers.c diff --git a/CMakeLists.txt b/CMakeLists.txt index d95bb84f..67dfe4eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -133,9 +133,6 @@ find_package(PCRE) # List sources and headers set(SOURCE_FILES - src/core/wrappers/wrap.h - src/core/wrappers/wrap.c - src/core/wrappers/wrappers.c src/core/abort.c src/core/abort.h src/core/report.c @@ -203,10 +200,6 @@ if (PCRE_FOUND) set(HAVE_PCRE 1) endif () -if (CMAKE_CXX_COMPILER_WORKS) - set(SOURCE_FILES ${SOURCE_FILES} src/core/wrappers/wrap.cc) -endif () - if (CMAKE_ObjectiveC_COMPILER_WORKS) set(CMAKE_ObjectiveC_FLAGS "${CMAKE_ObjectiveC_FLAGS} ${CMAKE_C_FLAGS} -fobjc-exceptions") if ("${CMAKE_ObjectiveC_COMPILER_ID}" STREQUAL "Clang" AND APPLE) @@ -217,7 +210,6 @@ if (CMAKE_ObjectiveC_COMPILER_WORKS) if (NOT WIN32) set(CMAKE_ObjectiveC_FLAGS "${CMAKE_ObjectiveC_FLAGS} -fPIC") endif () - set(SOURCE_FILES ${SOURCE_FILES} src/core/wrappers/wrap.m) endif () set(INTERFACE_FILES diff --git a/include/criterion/criterion.h b/include/criterion/criterion.h index e1ce1581..a1b183bc 100644 --- a/include/criterion/criterion.h +++ b/include/criterion/criterion.h @@ -113,6 +113,9 @@ CR_API int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg CR_API void criterion_register_test(struct criterion_test_set *tests, struct criterion_test *test); +extern const struct criterion_test *const criterion_current_test; +extern const struct criterion_suite *const criterion_current_suite; + CR_END_C_API #endif /* !CRITERION_H_ */ diff --git a/include/criterion/internal/test.h b/include/criterion/internal/test.h index 0772f1f2..9a2f526f 100644 --- a/include/criterion/internal/test.h +++ b/include/criterion/internal/test.h @@ -27,6 +27,14 @@ # include "designated-initializer-compat.h" # include "common.h" +# ifdef __OBJC__ +#import <Foundation/Foundation.h> +# endif + +# ifdef __cplusplus +# include <exception> +# endif + # define CR_IDENTIFIER_(Category, Name, Suffix) \ Category ## _ ## Name ## _ ## Suffix @@ -55,8 +63,88 @@ # define CR_SUITE_IDENTIFIER_(Name, Suffix) \ suite_ ## Name ## _ ## Suffix +CR_BEGIN_C_API + +CR_API void criterion_internal_test_setup(void); +CR_API void criterion_internal_test_main(void (*fn)(void)); +CR_API void criterion_internal_test_teardown(void); + +CR_END_C_API + +static const char *const cr_msg_test_init_std_exception = "Caught an unexpected exception during the test initialization: %s."; +static const char *const cr_msg_test_init_other_exception = "Caught some unexpected exception during the test initialization."; +static const char *const cr_msg_test_main_std_exception = "Caught an unexpected exception during the test execution: %s."; +static const char *const cr_msg_test_main_other_exception = "Caught some unexpected exception during the test execution."; +static const char *const cr_msg_test_fini_std_exception = "Caught an unexpected exception during the test finalization: %s."; +static const char *const cr_msg_test_fini_other_exception = "Caught some unexpected exception during the test finalization."; + +# ifdef __cplusplus +# define CR_TEST_TRAMPOLINE_(Category, Name) \ + static inline void CR_IDENTIFIER_(Category, Name, jmp)(void) { \ + try { \ + criterion_internal_test_setup(); \ + } catch (const std::exception &e) { \ + criterion_test_die(cr_msg_test_init_std_exception, e.what()); \ + } catch (...) { \ + criterion_test_die(cr_msg_test_init_other_exception); \ + } \ + try { \ + criterion_internal_test_main(CR_IDENTIFIER_(Category, Name, impl)); \ + } catch (const std::exception &e) { \ + criterion_test_die(cr_msg_test_main_std_exception, e.what()); \ + } catch (...) { \ + criterion_test_die(cr_msg_test_main_other_exception); \ + } \ + try { \ + criterion_internal_test_teardown(); \ + } catch (const std::exception &e) { \ + criterion_test_die(cr_msg_test_fini_std_exception, e.what()); \ + } catch (...) { \ + criterion_test_die(cr_msg_test_fini_other_exception); \ + } \ + } +# else +# if defined(__OBJC__) && defined(__EXCEPTIONS) +# define CR_TEST_TRAMPOLINE_(Category, Name) \ + static inline void CR_IDENTIFIER_(Category, Name, jmp)(void) { \ + @try { \ + criterion_internal_test_setup(); \ + } @catch (NSException *e) { \ + NSString *reason = [e reason]; \ + criterion_test_die(cr_msg_test_init_std_exception, [reason UTF8String]); \ + } @catch (...) { \ + criterion_test_die(cr_msg_test_init_other_exception); \ + } \ + @try { \ + criterion_internal_test_main(CR_IDENTIFIER_(Category, Name, impl)); \ + } @catch (NSException *e) { \ + NSString *reason = [e reason]; \ + criterion_test_die(cr_msg_test_main_std_exception, [reason UTF8String]); \ + } @catch (...) { \ + criterion_test_die(cr_msg_test_main_other_exception); \ + } \ + @try { \ + criterion_internal_test_teardown(); \ + } @catch (NSException *e) { \ + NSString *reason = [e reason]; \ + criterion_test_die(cr_msg_test_fini_std_exception, [reason UTF8String]); \ + } @catch (...) { \ + criterion_test_die(cr_msg_test_fini_other_exception); \ + } \ + } +# else +# define CR_TEST_TRAMPOLINE_(Category, Name) \ + static inline void CR_IDENTIFIER_(Category, Name, jmp)(void) { \ + criterion_internal_test_setup(); \ + criterion_internal_test_main(CR_IDENTIFIER_(Category, Name, impl)); \ + criterion_internal_test_teardown(); \ + } +# endif +# endif + # define CR_TEST_BASE(Category, Name, ...) \ CR_TEST_PROTOTYPE_(Category, Name); \ + CR_TEST_TRAMPOLINE_(Category, Name) \ struct criterion_test_extra_data CR_IDENTIFIER_(Category, Name, extra) = \ CR_EXPAND(CRITERION_MAKE_STRUCT(criterion_test_extra_data, \ .lang_ = CR_LANG, \ @@ -70,7 +158,7 @@ struct criterion_test CR_IDENTIFIER_(Category, Name, meta) = { \ #Name, \ #Category, \ - CR_IDENTIFIER_(Category, Name, impl), \ + CR_IDENTIFIER_(Category, Name, jmp), \ &CR_IDENTIFIER_(Category, Name, extra) \ }; \ CR_SECTION_("cr_tst") \ diff --git a/src/core/runner.c b/src/core/runner.c index 79dedb33..2caf8448 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -27,7 +27,7 @@ #include <errno.h> #include <csptr/smalloc.h> #include <valgrind/valgrind.h> -#include "criterion/criterion.h" +#include "criterion/internal/test.h" #include "criterion/options.h" #include "criterion/internal/ordered-set.h" #include "criterion/logging.h" @@ -35,7 +35,6 @@ #include "compat/time.h" #include "compat/posix.h" #include "compat/processor.h" -#include "wrappers/wrap.h" #include "string/i18n.h" #include "io/event.h" #include "io/output.h" @@ -84,8 +83,8 @@ CR_IMPL_SECTION_LIMITS(struct criterion_test*, cr_tst); CR_IMPL_SECTION_LIMITS(struct criterion_suite*, cr_sts); // This is here to make the test suite & test sections non-empty -TestSuite(); -Test(,) {} +CR_SUITE_BASE(,.sentinel_ = 0); +CR_TEST_BASE(,,.sentinel_ = 0) {} static INLINE void nothing(void) {} @@ -159,6 +158,9 @@ struct criterion_test_set *criterion_init(void) { return set; } +const struct criterion_test *criterion_current_test; +const struct criterion_suite *criterion_current_suite; + void run_test_child(struct criterion_test *test, struct criterion_suite *suite) { @@ -166,19 +168,16 @@ void run_test_child(struct criterion_test *test, VALGRIND_ENABLE_ERROR_REPORTING; #endif + criterion_current_test = test; + criterion_current_suite = suite; + if (suite->data && suite->data->timeout != 0 && test->data->timeout == 0) setup_timeout((uint64_t) (suite->data->timeout * 1e9)); else if (test->data->timeout != 0) setup_timeout((uint64_t) (test->data->timeout * 1e9)); - if (g_wrappers[test->data->lang_]) { - g_wrappers[test->data->lang_](test, suite); - } else { - criterion_test_die( - "The test is compiled in the %s programming language, but the \n" - "criterion runner have been compiled without its language support.", - cr_language_names[test->data->lang_]); - } + if (test->test) + test->test(); } #define push_event(...) \ diff --git a/src/core/wrappers/wrap.c b/src/core/test.c similarity index 71% rename from src/core/wrappers/wrap.c rename to src/core/test.c index 38009a2b..02a4578a 100644 --- a/src/core/wrappers/wrap.c +++ b/src/core/test.c @@ -27,28 +27,35 @@ #include "core/report.h" #include "compat/time.h" #include "io/event.h" -#include "wrap.h" + +extern const struct criterion_test *criterion_current_test; +extern const struct criterion_suite *criterion_current_suite; static INLINE void nothing(void) {} -void c_wrap(struct criterion_test *test, struct criterion_suite *suite) { +void criterion_internal_test_setup(void) { + const struct criterion_suite *suite = criterion_current_suite; + const struct criterion_test *test = criterion_current_test; criterion_send_event(PRE_INIT, NULL, 0); if (suite->data) (suite->data->init ? suite->data->init : nothing)(); (test->data->init ? test->data->init : nothing)(); +} + +void criterion_internal_test_main(void (*fn)(void)) { + const struct criterion_test *test = criterion_current_test; + criterion_send_event(PRE_TEST, NULL, 0); struct timespec_compat ts; if (!setjmp(g_pre_test)) { timer_start(&ts); - if (test->test) { - if (!test->data->param_) { - test->test(); - } else { - void(*param_test_func)(void *) = (void(*)(void*)) test->test; - param_test_func(g_worker_context.param->ptr); - } + if (!test->data->param_) { + fn(); + } else { + void(*param_test_func)(void *) = (void(*)(void*)) fn; + param_test_func(g_worker_context.param->ptr); } } @@ -57,9 +64,15 @@ void c_wrap(struct criterion_test *test, struct criterion_suite *suite) { elapsed_time = -1; criterion_send_event(POST_TEST, &elapsed_time, sizeof(double)); +} + +void criterion_internal_test_teardown(void) { + const struct criterion_suite *suite = criterion_current_suite; + const struct criterion_test *test = criterion_current_test; + (test->data->fini ? test->data->fini : nothing)(); if (suite->data) (suite->data->fini ? suite->data->fini : nothing)(); criterion_send_event(POST_FINI, NULL, 0); - } + diff --git a/src/core/wrappers/wrap.cc b/src/core/wrappers/wrap.cc deleted file mode 100644 index a5bc3eb1..00000000 --- a/src/core/wrappers/wrap.cc +++ /dev/null @@ -1,92 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include <exception> -#include "criterion/event.h" - -#include "core/report.h" - -extern "C" { - -#include "core/abort.h" -#include "core/worker.h" -#include "compat/time.h" -#include "wrap.h" -#include "common.h" - -static INLINE void nothing(void) {} - -void cxx_wrap(struct criterion_test *test, struct criterion_suite *suite); - -} - -void cxx_wrap(struct criterion_test *test, struct criterion_suite *suite) { - - criterion_send_event(PRE_INIT, NULL, 0); - try { - if (suite->data) - (suite->data->init ? suite->data->init : nothing)(); - (test->data->init ? test->data->init : nothing)(); - } catch (const std::exception &e) { - criterion_test_die("Caught an unexpected exception during the test initialization: %s.", e.what()); - } catch (...) { - criterion_test_die("Caught some unexpected exception during the test initialization."); - } - criterion_send_event(PRE_TEST, NULL, 0); - - struct timespec_compat ts; - if (!setjmp(g_pre_test)) { - timer_start(&ts); - if (test->test) { - try { - if (!test->data->param_) { - test->test(); - } else { - void(*param_test_func)(void *) = (void(*)(void*)) test->test; - param_test_func(g_worker_context.param->ptr); - } - } catch (const std::exception &e) { - criterion_test_die("Caught an unexpected exception during the test execution: %s.", e.what()); - } catch (...) { - criterion_test_die("Caught some unexpected exception during the test execution."); - } - } - } - - double elapsed_time; - if (!timer_end(&elapsed_time, &ts)) - elapsed_time = -1; - - criterion_send_event(POST_TEST, &elapsed_time, sizeof(double)); - try { - (test->data->fini ? test->data->fini : nothing)(); - if (suite->data) - (suite->data->fini ? suite->data->fini : nothing)(); - } catch (const std::exception &e) { - criterion_test_die("Caught an unexpected exception during the test finalization: %s.", e.what()); - } catch (...) { - criterion_test_die("Caught some unexpected exception during the test finalization."); - } - criterion_send_event(POST_FINI, NULL, 0); - -} diff --git a/src/core/wrappers/wrap.h b/src/core/wrappers/wrap.h deleted file mode 100644 index 5f20da93..00000000 --- a/src/core/wrappers/wrap.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#ifndef WRAP_H_ -# define WRAP_H_ - -# include "criterion/types.h" -# include "config.h" - -typedef void (f_wrapper)(struct criterion_test *, struct criterion_suite *); - -void c_wrap(struct criterion_test *test, struct criterion_suite *suite); - -# ifdef CXX_BRIDGE -void cxx_wrap(struct criterion_test *test, struct criterion_suite *suite); -# endif - -# ifdef OBJC_BRIDGE -void objc_wrap(struct criterion_test *test, struct criterion_suite *suite); -# endif - -extern f_wrapper *g_wrappers[]; - -#endif /* !WRAP_H_ */ diff --git a/src/core/wrappers/wrap.m b/src/core/wrappers/wrap.m deleted file mode 100644 index db3f75be..00000000 --- a/src/core/wrappers/wrap.m +++ /dev/null @@ -1,96 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#import <Foundation/Foundation.h> - -#include "criterion/assert.h" -#include "criterion/event.h" - -#include "core/abort.h" -#include "core/report.h" -#include "core/worker.h" -#include "compat/time.h" -#include "wrap.h" -#include "common.h" - -static INLINE void nothing(void) {} - -void objc_wrap(struct criterion_test *test, struct criterion_suite *suite) { - - criterion_send_event(PRE_INIT, NULL, 0); - @try { - if (suite->data) - (suite->data->init ? suite->data->init : nothing)(); - (test->data->init ? test->data->init : nothing)(); - } - @catch (NSException *e) { - NSString *reason = [e reason]; - criterion_test_die("Caught an unexpected exception during the test initialization: %s.", [reason UTF8String]); - } - @catch (...) { - criterion_test_die("Caught some unexpected exception during the test initialization."); - } - criterion_send_event(PRE_TEST, NULL, 0); - - struct timespec_compat ts; - if (!setjmp(g_pre_test)) { - timer_start(&ts); - if (test->test) { - @try { - if (!test->data->param_) { - test->test(); - } else { - void(*param_test_func)(void *) = (void(*)(void*)) test->test; - param_test_func(g_worker_context.param->ptr); - } - } - @catch (NSException *e) { - NSString *reason = [e reason]; - criterion_test_die("Caught an unexpected exception during the test execution: %s.", [reason UTF8String]); - } - @catch (...) { - criterion_test_die("Caught some unexpected exception during the test execution."); - } - } - } - - double elapsed_time; - if (!timer_end(&elapsed_time, &ts)) - elapsed_time = -1; - - criterion_send_event(POST_TEST, &elapsed_time, sizeof(double)); - @try { - (test->data->fini ? test->data->fini : nothing)(); - if (suite->data) - (suite->data->fini ? suite->data->fini : nothing)(); - } - @catch (NSException *e) { - NSString *reason = [e reason]; - criterion_test_die("Caught an unexpected exception during the test finalization: %s.", [reason UTF8String]); - } - @catch (...) { - criterion_test_die("Caught some unexpected exception during the test finalization."); - } - criterion_send_event(POST_FINI, NULL, 0); - -} diff --git a/src/core/wrappers/wrappers.c b/src/core/wrappers/wrappers.c deleted file mode 100644 index a4094e11..00000000 --- a/src/core/wrappers/wrappers.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright © 2015 Franklin "Snaipe" Mathieu <http://snai.pe/> - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include "wrap.h" - -f_wrapper *g_wrappers[CR_LANG_SIZE_] = { - [CR_LANG_C] = c_wrap, - -#ifdef CXX_BRIDGE - [CR_LANG_CXX] = cxx_wrap, -#endif - -#ifdef OBJC_BRIDGE - [CR_LANG_OBJC] = objc_wrap, - [CR_LANG_OBJCXX] = objc_wrap, -#endif -}; - -const char *const cr_language_names[CR_LANG_SIZE_] = { - [CR_LANG_C] = "C", - [CR_LANG_CXX] = "C++", - [CR_LANG_OBJC] = "Objective-C", - [CR_LANG_OBJCXX] = "Objective-C++", -}; - From aaa21d922c750f12f1aa5183cd6e7db0a7af196d Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sat, 5 Dec 2015 14:27:28 +0100 Subject: [PATCH 194/211] Simplified empty tests & suite placeholders in runner --- src/core/runner.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/runner.c b/src/core/runner.c index 79dedb33..091a7e43 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -84,8 +84,8 @@ CR_IMPL_SECTION_LIMITS(struct criterion_test*, cr_tst); CR_IMPL_SECTION_LIMITS(struct criterion_suite*, cr_sts); // This is here to make the test suite & test sections non-empty -TestSuite(); -Test(,) {} +CR_SECTION_("cr_sts") struct criterion_suite *dummy_suite = NULL; +CR_SECTION_("cr_tst") struct criterion_test *dummy_test = NULL; static INLINE void nothing(void) {} From 13e7928d0c8fbebbe533ca7d09727718d57dc430 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Sun, 6 Dec 2015 13:28:43 +0100 Subject: [PATCH 195/211] [Issue #82] Fixed deadlocks that were triggered when the event pipe was full and a child needed to be reaped --- src/compat/process.c | 57 ++++++++++++++++++++++++++++++++++---------- src/compat/process.h | 3 +++ src/core/runner.c | 2 ++ 3 files changed, 49 insertions(+), 13 deletions(-) diff --git a/src/compat/process.c b/src/compat/process.c index 08392995..ba7055c4 100644 --- a/src/compat/process.c +++ b/src/compat/process.c @@ -88,6 +88,8 @@ static int get_win_status(HANDLE handle) { } return sig ? sig : exit_code << 8; } +#else +# include <pthread.h> #endif struct worker_context g_worker_context = {.test = NULL}; @@ -115,9 +117,7 @@ static struct full_context local_ctx; # error Unsupported compiler. Use GCC or Clang under *nixes. # endif -static void handle_sigchld(CR_UNUSED int sig) { - assert(sig == SIGCHLD); - +static void handle_sigchld_pump(void) { int fd = g_worker_pipe->fds[1]; pid_t pid; int status; @@ -142,8 +142,49 @@ static void handle_sigchld(CR_UNUSED int sig) { } } } + +/* + * This child reaping logic is a dirty hack to prevent deadlocks + * when the pipe is overflowing and a child terminates. + * + * (Windows doesn't have this issue as the waitpid logic is threaded by + * RegisterWaitForSingleObject) + * + * REMOVE WHEN REFACTORING I/O LAYER + */ +static pthread_t child_pump; +static bool child_pump_running; + +static void *chld_pump_thread_main(void *nil) { + child_pump_running = true; + + do { + handle_sigchld_pump(); + usleep(1000); + } while (child_pump_running); + + return nil; +} #endif +void init_proc_compat(void) { +#ifndef VANILLA_WIN32 + pthread_attr_t attr; + int err = pthread_attr_init(&attr) + || pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) + || pthread_create(&child_pump, &attr, chld_pump_thread_main, NULL) + || pthread_attr_destroy(&attr); + if (err) { + perror(0); + exit(1); + } +#endif +} + +void free_proc_compat(void) { + child_pump_running = false; +} + #ifdef VANILLA_WIN32 struct wait_context { HANDLE wait_handle; @@ -251,16 +292,6 @@ int resume_child(void) { free(param); return 1; #else -# if defined(__unix__) || defined(__APPLE__) - struct sigaction sa; - sa.sa_handler = &handle_sigchld; - sigemptyset(&sa.sa_mask); - sa.sa_flags = SA_RESTART | SA_NOCLDSTOP; - if (sigaction(SIGCHLD, &sa, 0) == -1) { - perror(0); - exit(1); - } -# endif return 0; #endif } diff --git a/src/compat/process.h b/src/compat/process.h index 1259e7ea..193c12b6 100644 --- a/src/compat/process.h +++ b/src/compat/process.h @@ -60,4 +60,7 @@ bool is_current_process(s_proc_handle *proc); unsigned long long get_process_id(void); unsigned long long get_process_id_of(s_proc_handle *proc); +void init_proc_compat(void); +void free_proc_compat(void); + #endif /* !COMPAT_PROCESS_H_ */ diff --git a/src/core/runner.c b/src/core/runner.c index 091a7e43..53238dbd 100644 --- a/src/core/runner.c +++ b/src/core/runner.c @@ -452,6 +452,7 @@ static int criterion_run_all_tests_impl(struct criterion_test_set *set) { strerror(errno)); abort(); } + init_proc_compat(); struct criterion_global_stats *stats = stats_init(); run_tests_async(set, stats); @@ -466,6 +467,7 @@ static int criterion_run_all_tests_impl(struct criterion_test_set *set) { log(post_all, stats); cleanup: + free_proc_compat(); sfree(g_worker_pipe); sfree(stats); return result; From cdcf52e373866330d755a2a6a62ac55599953e8d Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 7 Dec 2015 13:55:55 +0100 Subject: [PATCH 196/211] Fixed conditional windows build broken by 13e7928d0c8fbebbe533ca7d09727718d57dc430 --- src/compat/process.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/compat/process.c b/src/compat/process.c index ba7055c4..6bb6872f 100644 --- a/src/compat/process.c +++ b/src/compat/process.c @@ -182,7 +182,9 @@ void init_proc_compat(void) { } void free_proc_compat(void) { +#ifndef VANILLA_WIN32 child_pump_running = false; +#endif } #ifdef VANILLA_WIN32 From dbe2894b885ff2d122e5bdaf02952f3b4dfd900f Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 7 Dec 2015 13:57:22 +0100 Subject: [PATCH 197/211] [Issue #81] Fixed documentation not mentioning that the assert message is a format string --- doc/assert.rst | 217 +++++++++++++++++++++++++------------------------ 1 file changed, 110 insertions(+), 107 deletions(-) diff --git a/doc/assert.rst b/doc/assert.rst index 46ad0044..20972419 100644 --- a/doc/assert.rst +++ b/doc/assert.rst @@ -9,36 +9,39 @@ As each ``assert`` macros have an ``expect`` counterpart with the exact same number of parameters and name suffix, there is no benefit in adding ``expect`` macros to this list. Hence only ``assert`` macros are represented here. +All ``assert`` macros may take an optional ``printf`` format string and +parameters. + Common Assertions ----------------- -======================================================================= =========================================================================== =========================================== -Macro Passes if and only if Notes -======================================================================= =========================================================================== =========================================== -cr_assert(Condition, [Message, [Args...]]) ``Condition`` is true. ------------------------------------------------------------------------ --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_not(Condition, [Message, [Args...]]) ``Condition`` is false. ------------------------------------------------------------------------ --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_null(Value, [Message, [Args...]]) ``Value`` is ``NULL``. ------------------------------------------------------------------------ --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_not_null(Value, [Message, [Args...]]) ``Value`` is not ``NULL``. ------------------------------------------------------------------------ --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_eq(Actual, Expected, [Message, [Args...]]) ``Actual`` is equal to ``Expected``. Compatible with C++ operator overloading ------------------------------------------------------------------------ --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_neq(Actual, Unexpected, [Message, [Args...]]) ``Actual`` is not equal to ``Unexpected``. Compatible with C++ operator overloading ------------------------------------------------------------------------ --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_lt(Actual, Reference, [Message, [Args...]]) ``Actual`` is less than ``Reference``. Compatible with C++ operator overloading ------------------------------------------------------------------------ --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_leq(Actual, Reference, [Message, [Args...]]) ``Actual`` is less or equal to ``Reference``. Compatible with C++ operator overloading ------------------------------------------------------------------------ --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_gt(Actual, Reference, [Message, [Args...]]) ``Actual`` is greater than ``Reference``. Compatible with C++ operator overloading ------------------------------------------------------------------------ --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_geq(Actual, Reference, [Message, [Args...]]) ``Actual`` is greater or equal to ``Reference``. Compatible with C++ operator overloading ------------------------------------------------------------------------ --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_float_eq(Actual, Expected, Epsilon, [Message, [Args...]]) ``Actual`` is equal to ``Expected`` with a tolerance of ``Epsilon``. Use this to test equality between floats ------------------------------------------------------------------------ --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_float_neq(Actual, Unexpected, Epsilon, [Message, [Args...]]) ``Actual`` is not equal to ``Unexpected`` with a tolerance of ``Epsilon``. Use this to test inequality between floats -======================================================================= =========================================================================== =========================================== +=========================================================================== =========================================================================== =========================================== +Macro Passes if and only if Notes +=========================================================================== =========================================================================== =========================================== +cr_assert(Condition, [FormatString, [Args...]]) ``Condition`` is true. +--------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_not(Condition, [FormatString, [Args...]]) ``Condition`` is false. +--------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_null(Value, [FormatString, [Args...]]) ``Value`` is ``NULL``. +--------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_not_null(Value, [FormatString, [Args...]]) ``Value`` is not ``NULL``. +--------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_eq(Actual, Expected, [FormatString, [Args...]]) ``Actual`` is equal to ``Expected``. Compatible with C++ operator overloading +--------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_neq(Actual, Unexpected, [FormatString, [Args...]]) ``Actual`` is not equal to ``Unexpected``. Compatible with C++ operator overloading +--------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_lt(Actual, Reference, [FormatString, [Args...]]) ``Actual`` is less than ``Reference``. Compatible with C++ operator overloading +--------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_leq(Actual, Reference, [FormatString, [Args...]]) ``Actual`` is less or equal to ``Reference``. Compatible with C++ operator overloading +--------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_gt(Actual, Reference, [FormatString, [Args...]]) ``Actual`` is greater than ``Reference``. Compatible with C++ operator overloading +--------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_geq(Actual, Reference, [FormatString, [Args...]]) ``Actual`` is greater or equal to ``Reference``. Compatible with C++ operator overloading +--------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_float_eq(Actual, Expected, Epsilon, [FormatString, [Args...]]) ``Actual`` is equal to ``Expected`` with a tolerance of ``Epsilon``. Use this to test equality between floats +--------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_float_neq(Actual, Unexpected, Epsilon, [FormatString, [Args...]]) ``Actual`` is not equal to ``Unexpected`` with a tolerance of ``Epsilon``. Use this to test inequality between floats +=========================================================================== =========================================================================== =========================================== String Assertions ----------------- @@ -47,98 +50,98 @@ Note: these macros are meant to deal with *native* strings, i.e. char arrays. Most of them won't work on ``std::string`` in C++, with some exceptions -- for ``std::string``, you should use regular comparison assersions, as listed above. -=========================================================== =================================================================== =========================================== -Macro Passes if and only if Notes -=========================================================== =================================================================== =========================================== -cr_assert_str_empty(Value, [Message, [Args...]]) ``Value`` is an empty string. Also works on std::string ------------------------------------------------------------ ------------------------------------------------------------------- ------------------------------------------- -cr_assert_str_not_empty(Value, [Message, [Args...]]) ``Value`` is not an empty string. Also works on std::string ------------------------------------------------------------ ------------------------------------------------------------------- ------------------------------------------- -cr_assert_str_eq(Actual, Expected, [Message, [Args...]]) ``Actual`` is lexicographically equal to ``Expected``. ------------------------------------------------------------ ------------------------------------------------------------------- ------------------------------------------- -cr_assert_str_neq(Actual, Unexpected, [Message, [Args...]]) ``Actual`` is not lexicographically equal to ``Unexpected``. ------------------------------------------------------------ ------------------------------------------------------------------- ------------------------------------------- -cr_assert_str_lt(Actual, Reference, [Message, [Args...]]) ``Actual`` is lexicographically less than ``Reference``. ------------------------------------------------------------ ------------------------------------------------------------------- ------------------------------------------- -cr_assert_str_leq(Actual, Reference, [Message, [Args...]]) ``Actual`` is lexicographically less or equal to ``Reference``. ------------------------------------------------------------ ------------------------------------------------------------------- ------------------------------------------- -cr_assert_str_gt(Actual, Reference, [Message, [Args...]]) ``Actual`` is lexicographically greater than ``Reference``. ------------------------------------------------------------ ------------------------------------------------------------------- ------------------------------------------- -cr_assert_str_geq(Actual, Reference, [Message, [Args...]]) ``Actual`` is lexicographically greater or equal to ``Reference``. -=========================================================== =================================================================== =========================================== +================================================================ =================================================================== =========================================== +Macro Passes if and only if Notes +================================================================ =================================================================== =========================================== +cr_assert_str_empty(Value, [FormatString, [Args...]]) ``Value`` is an empty string. Also works on std::string +---------------------------------------------------------------- ------------------------------------------------------------------- ------------------------------------------- +cr_assert_str_not_empty(Value, [FormatString, [Args...]]) ``Value`` is not an empty string. Also works on std::string +---------------------------------------------------------------- ------------------------------------------------------------------- ------------------------------------------- +cr_assert_str_eq(Actual, Expected, [FormatString, [Args...]]) ``Actual`` is lexicographically equal to ``Expected``. +---------------------------------------------------------------- ------------------------------------------------------------------- ------------------------------------------- +cr_assert_str_neq(Actual, Unexpected, [FormatString, [Args...]]) ``Actual`` is not lexicographically equal to ``Unexpected``. +---------------------------------------------------------------- ------------------------------------------------------------------- ------------------------------------------- +cr_assert_str_lt(Actual, Reference, [FormatString, [Args...]]) ``Actual`` is lexicographically less than ``Reference``. +---------------------------------------------------------------- ------------------------------------------------------------------- ------------------------------------------- +cr_assert_str_leq(Actual, Reference, [FormatString, [Args...]]) ``Actual`` is lexicographically less or equal to ``Reference``. +---------------------------------------------------------------- ------------------------------------------------------------------- ------------------------------------------- +cr_assert_str_gt(Actual, Reference, [FormatString, [Args...]]) ``Actual`` is lexicographically greater than ``Reference``. +---------------------------------------------------------------- ------------------------------------------------------------------- ------------------------------------------- +cr_assert_str_geq(Actual, Reference, [FormatString, [Args...]]) ``Actual`` is lexicographically greater or equal to ``Reference``. +================================================================ =================================================================== =========================================== Array Assertions ----------------- -=========================================================================== =========================================================================== =========================================== -Macro Passes if and only if Notes -=========================================================================== =========================================================================== =========================================== -cr_assert_arr_eq(Actual, Expected, [Message, [Args...]]) ``Actual`` is byte-to-byte equal to ``Expected``. This should not be used on struct arrays, - consider using ``cr_assert_arr_eq_cmp`` - instead. ---------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_arr_neq(Actual, Unexpected, [Message, [Args...]]) ``Actual`` is not byte-to-byte equal to ``Unexpected``. This should not be used on struct arrays, - consider using ``cr_assert_arr_neq_cmp`` - instead. ---------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_arr_eq_cmp(Actual, Expected, Size, Cmp, [Message, [Args...]]) ``Actual`` is comparatively equal to ``Expected`` Only available in C++ and GNU C99 ---------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_arr_neq_cmp(Actual, Unexpected, Size, Cmp, [Message, [Args...]]) ``Actual`` is not comparatively equal to ``Expected`` Only available in C++ and GNU C99 ---------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_arr_lt_cmp(Actual, Reference, Size, Cmp, [Message, [Args...]]) ``Actual`` is comparatively less than ``Reference`` Only available in C++ and GNU C99 ---------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_arr_leq_cmp(Actual, Reference, Size, Cmp, [Message, [Args...]]) ``Actual`` is comparatively less or equal to ``Reference`` Only available in C++ and GNU C99 ---------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_arr_gt_cmp(Actual, Reference, Size, Cmp, [Message, [Args...]]) ``Actual`` is comparatively greater than ``Reference`` Only available in C++ and GNU C99 ---------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_arr_geq_cmp(Actual, Reference, Size, Cmp, [Message, [Args...]]) ``Actual`` is comparatively greater or equal to ``Reference`` Only available in C++ and GNU C99 -=========================================================================== =========================================================================== =========================================== +=============================================================================== =========================================================================== =========================================== +Macro Passes if and only if Notes +=============================================================================== =========================================================================== =========================================== +cr_assert_arr_eq(Actual, Expected, [FormatString, [Args...]]) ``Actual`` is byte-to-byte equal to ``Expected``. This should not be used on struct arrays, + consider using ``cr_assert_arr_eq_cmp`` + instead. +------------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_arr_neq(Actual, Unexpected, [FormatString, [Args...]]) ``Actual`` is not byte-to-byte equal to ``Unexpected``. This should not be used on struct arrays, + consider using ``cr_assert_arr_neq_cmp`` + instead. +------------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_arr_eq_cmp(Actual, Expected, Size, Cmp, [FormatString, [Args...]]) ``Actual`` is comparatively equal to ``Expected`` Only available in C++ and GNU C99 +------------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_arr_neq_cmp(Actual, Unexpected, Size, Cmp, [FormatString, [Args...]]) ``Actual`` is not comparatively equal to ``Expected`` Only available in C++ and GNU C99 +------------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_arr_lt_cmp(Actual, Reference, Size, Cmp, [FormatString, [Args...]]) ``Actual`` is comparatively less than ``Reference`` Only available in C++ and GNU C99 +------------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_arr_leq_cmp(Actual, Reference, Size, Cmp, [FormatString, [Args...]]) ``Actual`` is comparatively less or equal to ``Reference`` Only available in C++ and GNU C99 +------------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_arr_gt_cmp(Actual, Reference, Size, Cmp, [FormatString, [Args...]]) ``Actual`` is comparatively greater than ``Reference`` Only available in C++ and GNU C99 +------------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_arr_geq_cmp(Actual, Reference, Size, Cmp, [FormatString, [Args...]]) ``Actual`` is comparatively greater or equal to ``Reference`` Only available in C++ and GNU C99 +=============================================================================== =========================================================================== =========================================== Exception Assertions -------------------- The following assertion macros are only defined for C++. -=========================================================================== =========================================================================== =========================================== -Macro Passes if and only if Notes -=========================================================================== =========================================================================== =========================================== -cr_assert_throw(Statement, Exception, [Message, [Args...]]) ``Statement`` throws an instance of ``Exception``. ---------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_no_throw(Statement, Exception, [Message, [Args...]]) ``Statement`` does not throws an instance of ``Exception``. ---------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_any_throw(Statement, [Message, [Args...]]) ``Statement`` throws any kind of exception. ---------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- -cr_assert_none_throw(Statement, [Message, [Args...]]) ``Statement`` does not throw any exception. -=========================================================================== =========================================================================== =========================================== +=============================================================================== =========================================================================== =========================================== +Macro Passes if and only if Notes +=============================================================================== =========================================================================== =========================================== +cr_assert_throw(Statement, Exception, [FormatString, [Args...]]) ``Statement`` throws an instance of ``Exception``. +------------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_no_throw(Statement, Exception, [FormatString, [Args...]]) ``Statement`` does not throws an instance of ``Exception``. +------------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_any_throw(Statement, [FormatString, [Args...]]) ``Statement`` throws any kind of exception. +------------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------------------- +cr_assert_none_throw(Statement, [FormatString, [Args...]]) ``Statement`` does not throw any exception. +=============================================================================== =========================================================================== =========================================== File Assertions --------------- -=============================================================================== ============================================================================ =========================================== -Macro Passes if and only if Notes -=============================================================================== ============================================================================ =========================================== -cr_assert_file_contents_eq_str(File, ExpectedContents, [Message, [Args...]]) The contents of ``File`` are equal to the string ``ExpectedContents``. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_file_contents_neq_str(File, ExpectedContents, [Message, [Args...]]) The contents of ``File`` are not equal to the string ``ExpectedContents``. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stdout_eq_str(ExpectedContents, [Message, [Args...]]) The contents of ``stdout`` are equal to the string ``ExpectedContents``. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stdout_neq_str(ExpectedContents, [Message, [Args...]]) The contents of ``stdout`` are not equal to the string ``ExpectedContents``. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stderr_eq_str(ExpectedContents, [Message, [Args...]]) The contents of ``stderr`` are equal to the string ``ExpectedContents``. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stderr_neq_str(ExpectedContents, [Message, [Args...]]) The contents of ``stderr`` are not equal to the string ``ExpectedContents``. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_file_contents_eq(File, RefFile, [Message, [Args...]]) The contents of ``File`` are equal to the contents of ``RefFile``. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_file_contents_neq(File, RefFile, [Message, [Args...]]) The contents of ``File`` are not equal to the contents of ``RefFile``. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stdout_eq(RefFile, [Message, [Args...]]) The contents of ``stdout`` are equal to the contents of ``RefFile``. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stdout_neq(RefFile, [Message, [Args...]]) The contents of ``stdout`` are not equal to the contents of ``RefFile``. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stderr_eq(RefFile, [Message, [Args...]]) The contents of ``stderr`` are equal to the contents of ``RefFile``. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stderr_neq(RefFile, [Message, [Args...]]) The contents of ``stderr`` are not equal to the contents of ``RefFile``. -=============================================================================== ============================================================================ =========================================== +=================================================================================== ============================================================================ =========================================== +Macro Passes if and only if Notes +=================================================================================== ============================================================================ =========================================== +cr_assert_file_contents_eq_str(File, ExpectedContents, [FormatString, [Args...]]) The contents of ``File`` are equal to the string ``ExpectedContents``. +----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- +cr_assert_file_contents_neq_str(File, ExpectedContents, [FormatString, [Args...]]) The contents of ``File`` are not equal to the string ``ExpectedContents``. +----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- +cr_assert_stdout_eq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stdout`` are equal to the string ``ExpectedContents``. +----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- +cr_assert_stdout_neq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stdout`` are not equal to the string ``ExpectedContents``. +----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- +cr_assert_stderr_eq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stderr`` are equal to the string ``ExpectedContents``. +----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- +cr_assert_stderr_neq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stderr`` are not equal to the string ``ExpectedContents``. +----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- +cr_assert_file_contents_eq(File, RefFile, [FormatString, [Args...]]) The contents of ``File`` are equal to the contents of ``RefFile``. +----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- +cr_assert_file_contents_neq(File, RefFile, [FormatString, [Args...]]) The contents of ``File`` are not equal to the contents of ``RefFile``. +----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- +cr_assert_stdout_eq(RefFile, [FormatString, [Args...]]) The contents of ``stdout`` are equal to the contents of ``RefFile``. +----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- +cr_assert_stdout_neq(RefFile, [FormatString, [Args...]]) The contents of ``stdout`` are not equal to the contents of ``RefFile``. +----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- +cr_assert_stderr_eq(RefFile, [FormatString, [Args...]]) The contents of ``stderr`` are equal to the contents of ``RefFile``. +----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- +cr_assert_stderr_neq(RefFile, [FormatString, [Args...]]) The contents of ``stderr`` are not equal to the contents of ``RefFile``. +=================================================================================== ============================================================================ =========================================== From 00ca6cfc6742d03fe30776befd9bb9e753a4c507 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 7 Dec 2015 15:03:27 +0100 Subject: [PATCH 198/211] Added doxygen docs for abort.h --- include/criterion/abort.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/criterion/abort.h b/include/criterion/abort.h index d6a649e6..77d841ee 100644 --- a/include/criterion/abort.h +++ b/include/criterion/abort.h @@ -28,7 +28,18 @@ CR_BEGIN_C_API +/** + * Aborts the current test, marking it as failed. + * + * This function does not return. + */ CR_API CR_NORETURN void criterion_abort_test(void); + +/** + * Continues the current test. + * + * Used as a counterpart to criterion_abort_test. + */ CR_INLINE static void criterion_continue_test(void) {} CR_END_C_API From 2e5e4af3c721a52c16761455eebbf732ebe8a570 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 7 Dec 2015 15:03:35 +0100 Subject: [PATCH 199/211] Added doxygen docs for alloc.h --- include/criterion/alloc.h | 116 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) diff --git a/include/criterion/alloc.h b/include/criterion/alloc.h index 71d4ca77..555a1dec 100644 --- a/include/criterion/alloc.h +++ b/include/criterion/alloc.h @@ -35,9 +35,55 @@ using std::size_t; CR_BEGIN_C_API +/** + * Allocates a block of memory usable by the test. + * + * It is undefined behaviour to access a pointer returned by malloc(3) + * inside a test or its setup and teardown functions; cr_malloc must + * be use in its place for this purpose. + * + * This function is semantically identical to malloc(3). + * + * @param[in] size The minimal size in bytes of the newly allocated memory. + * @returns The pointer to the start of the allocated memory. + */ CR_API void *cr_malloc(size_t size); + +/** + * Allocates and zero-initialize a block of memory usable by the test. + * + * It is undefined behaviour to access a pointer returned by calloc(3) + * inside a test or its setup and teardown functions; cr_calloc must + * be use in its place for this purpose. + * + * This function is semantically identical to calloc(3). + * + * @param[in] nmemb The number of elements to allocate + * @param[in] size The minimal size of each element. + * @returns The pointer to the start of the allocated memory. + */ CR_API void *cr_calloc(size_t nmemb, size_t size); + +/** + * Reallocates a block of memory usable by the test. + * + * It is undefined behaviour to access a pointer returned by realloc(3) + * inside a test or its setup and teardown functions; cr_realloc must + * be used in its place for this purpose. + * + * This function is semantically identical to realloc(3). + * + * @param[in] ptr A pointer to the memory that needs to be resized. + * @param[in] size The minimal size of the reallocated memory. + * @returns The pointer to the start of the reallocated memory. + */ CR_API void *cr_realloc(void *ptr, size_t size); + +/** + * Free a block of memory allocated by cr_malloc, cr_free or cr_realloc. + * + * @param[in] ptr A pointer to the memory that needs to be freed. + */ CR_API void cr_free(void *ptr); CR_END_C_API @@ -52,6 +98,19 @@ namespace criterion { void *(*const calloc)(size_t, size_t) = cr_calloc; void *(*const realloc)(void *, size_t) = cr_realloc; + /** + * Allocates and construct a new object. + * + * It is undefined behaviour to access a pointer returned by the new + * operator inside a test or its setup and teardown functions; + * new_obj must be used in its place for this purpose. + * + * This function is semantically identical to the new operator. + * + * @tparam T The type of the object to construct + * @param[in] params The constructor parameters of T. + * @returns The pointer to the newly constructed object. + */ template<typename T, typename... Params> T* new_obj(Params... params) { T* obj = static_cast<T*>(cr_malloc(sizeof (T))); @@ -59,6 +118,19 @@ namespace criterion { return obj; } + /** + * Allocates and construct a new array of primitive types + * + * It is undefined behaviour to access a pointer returned by the new[] + * operator inside a test or its setup and teardown functions; + * new_arr must be used in its place for this purpose. + * + * This function is semantically identical to the new[] operator. + * + * @tparam T The compound type of the array to construct + * @param[in] len The length of the array. + * @returns The pointer to the newly constructed array. + */ template<typename T> typename std::enable_if<std::is_fundamental<T>::value>::type* new_arr(size_t len) { @@ -68,6 +140,19 @@ namespace criterion { return arr; } + /** + * Allocates and construct a new array of object types + * + * It is undefined behaviour to access a pointer returned by the new[] + * operator inside a test or its setup and teardown functions; + * new_arr must be used in its place for this purpose. + * + * This function is semantically identical to the new[] operator. + * + * @tparam T The compound type of the array to construct + * @param[in] len The length of the array. + * @returns The pointer to the newly constructed array. + */ template<typename T> T* new_arr(size_t len) { void *ptr = cr_malloc(sizeof (size_t) + sizeof (T) * len); @@ -79,17 +164,41 @@ namespace criterion { return arr; } + /** + * Destroys and frees an object allocated by new_obj. + * + * This function is semantically identical to the delete operator. + * + * @tparam T The type of the object to construct + * @param[in] ptr The object to destroy. + */ template<typename T> void delete_obj(T* ptr) { ptr->~T(); cr_free(ptr); } + /** + * Destroys and frees an array allocated by delete_arr. + * + * This function is semantically identical to the delete[] operator. + * + * @tparam T The type of the object to construct + * @param[in] ptr The object to destroy. + */ template<typename T> void delete_arr(typename std::enable_if<std::is_fundamental<T>::value>::type* ptr) { cr_free(ptr); } + /** + * Destroys and frees an array allocated by delete_arr. + * + * This function is semantically identical to the delete[] operator. + * + * @tparam T The type of the object to construct + * @param[in] ptr The object to destroy. + */ template<typename T> void delete_arr(T* ptr) { size_t *ptr_ = reinterpret_cast<size_t*>(ptr); @@ -100,6 +209,13 @@ namespace criterion { cr_free(ptr_ - 1); } + /** + * Allocator for use in the STL. + * + * This internally uses calls to the cr_malloc function family, which + * means that STL collections can be safely used inside tests or + * setup/teardown functions if this allocator is used. + */ template<typename T> struct allocator { typedef T value_type; From 1b9c13246a4d20db051346fdd186896e61278aa2 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Mon, 7 Dec 2015 15:09:30 +0100 Subject: [PATCH 200/211] Fixed misformed table in assert docs --- doc/assert.rst | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/doc/assert.rst b/doc/assert.rst index 20972419..49d23341 100644 --- a/doc/assert.rst +++ b/doc/assert.rst @@ -118,30 +118,30 @@ File Assertions --------------- =================================================================================== ============================================================================ =========================================== -Macro Passes if and only if Notes +Macro Passes if and only if Notes =================================================================================== ============================================================================ =========================================== -cr_assert_file_contents_eq_str(File, ExpectedContents, [FormatString, [Args...]]) The contents of ``File`` are equal to the string ``ExpectedContents``. +cr_assert_file_contents_eq_str(File, ExpectedContents, [FormatString, [Args...]]) The contents of ``File`` are equal to the string ``ExpectedContents``. ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_file_contents_neq_str(File, ExpectedContents, [FormatString, [Args...]]) The contents of ``File`` are not equal to the string ``ExpectedContents``. +cr_assert_file_contents_neq_str(File, ExpectedContents, [FormatString, [Args...]]) The contents of ``File`` are not equal to the string ``ExpectedContents``. ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stdout_eq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stdout`` are equal to the string ``ExpectedContents``. +cr_assert_stdout_eq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stdout`` are equal to the string ``ExpectedContents``. ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stdout_neq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stdout`` are not equal to the string ``ExpectedContents``. +cr_assert_stdout_neq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stdout`` are not equal to the string ``ExpectedContents``. ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stderr_eq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stderr`` are equal to the string ``ExpectedContents``. +cr_assert_stderr_eq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stderr`` are equal to the string ``ExpectedContents``. ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stderr_neq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stderr`` are not equal to the string ``ExpectedContents``. +cr_assert_stderr_neq_str(ExpectedContents, [FormatString, [Args...]]) The contents of ``stderr`` are not equal to the string ``ExpectedContents``. ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_file_contents_eq(File, RefFile, [FormatString, [Args...]]) The contents of ``File`` are equal to the contents of ``RefFile``. +cr_assert_file_contents_eq(File, RefFile, [FormatString, [Args...]]) The contents of ``File`` are equal to the contents of ``RefFile``. ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_file_contents_neq(File, RefFile, [FormatString, [Args...]]) The contents of ``File`` are not equal to the contents of ``RefFile``. +cr_assert_file_contents_neq(File, RefFile, [FormatString, [Args...]]) The contents of ``File`` are not equal to the contents of ``RefFile``. ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stdout_eq(RefFile, [FormatString, [Args...]]) The contents of ``stdout`` are equal to the contents of ``RefFile``. +cr_assert_stdout_eq(RefFile, [FormatString, [Args...]]) The contents of ``stdout`` are equal to the contents of ``RefFile``. ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stdout_neq(RefFile, [FormatString, [Args...]]) The contents of ``stdout`` are not equal to the contents of ``RefFile``. +cr_assert_stdout_neq(RefFile, [FormatString, [Args...]]) The contents of ``stdout`` are not equal to the contents of ``RefFile``. ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stderr_eq(RefFile, [FormatString, [Args...]]) The contents of ``stderr`` are equal to the contents of ``RefFile``. +cr_assert_stderr_eq(RefFile, [FormatString, [Args...]]) The contents of ``stderr`` are equal to the contents of ``RefFile``. ----------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------------------------- -cr_assert_stderr_neq(RefFile, [FormatString, [Args...]]) The contents of ``stderr`` are not equal to the contents of ``RefFile``. +cr_assert_stderr_neq(RefFile, [FormatString, [Args...]]) The contents of ``stderr`` are not equal to the contents of ``RefFile``. =================================================================================== ============================================================================ =========================================== From 415fc20462e524c5fbc6a69e47be210a07f19834 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 8 Dec 2015 00:33:55 +0100 Subject: [PATCH 201/211] Added doxygen for hooks.h --- include/criterion/hooks.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/include/criterion/hooks.h b/include/criterion/hooks.h index a7559c60..d4e34ee3 100644 --- a/include/criterion/hooks.h +++ b/include/criterion/hooks.h @@ -26,6 +26,9 @@ # include "internal/hooks.h" +/** + * This enum lists all the phases of the runner lifecycle. + */ typedef enum { PRE_ALL, PRE_SUITE, @@ -42,6 +45,24 @@ typedef enum { typedef void (*f_report_hook)(); +/** + * ReportHook(Kind)(Type *param) { Function Body } + * + * Defines a report hook for the phase defined by Kind. + * + * The type of the parameter depends on the phase: + * + * - struct criterion_test_set for PRE_ALL. + * - struct criterion_suite_set for PRE_SUITE. + * - struct criterion_test for PRE_INIT and PRE_TEST. + * - struct criterion_assert_stats for ASSERT. + * - struct criterion_theory_stats for THEORY_FAIL. + * - struct criterion_test_stats for POST_TEST, POST_FINI, and TEST_CRASH. + * - struct criterion_suite_stats for POST_SUITE. + * - struct criterion_global_stats for POST_ALL. + * + * @param Kind The report phase to hook the function onto. + */ # define ReportHook(Kind) CR_REPORT_HOOK_IMPL(Kind) #endif /* !CRITERION_HOOKS_H_ */ From 7c416af673fa755ed60195cce5a764b5828c007e Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 8 Dec 2015 00:34:02 +0100 Subject: [PATCH 202/211] Added doxygen for options.h --- include/criterion/options.h | 70 +++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/include/criterion/options.h b/include/criterion/options.h index 220e32c9..fbe90144 100644 --- a/include/criterion/options.h +++ b/include/criterion/options.h @@ -28,20 +28,90 @@ # include "logging.h" struct criterion_options { + + /** + * The current logging threshold. + * + * default: 1 + */ enum criterion_logging_level logging_threshold; + + /** + * The logger that will be used during the execution of the runner. + * + * default: normal logger + */ struct criterion_logger *logger; + + /** + * Don't exit the child immediately after finishing to run the test + * function, and perform a full cleanup. + * + * Useful when tracking memory leaks, and is immediately implied when + * running the process under valgrind. + * + * default: false + */ bool no_early_exit; + + /** + * Always return a success from criterion_run_all_tests. + * + * default: false + */ bool always_succeed; + + /** + * Disable unicode and ansi coloring from the logging system. + * + * default: false + */ bool use_ascii; + + /** + * Exit immediately after the first test failure. + * + * default: false + */ bool fail_fast; + + /** + * Disable all tests not matching this extglob pattern. + * if NULL, don't filter tests. + * + * default: NULL + */ const char *pattern; + + /** + * Only print the base file name compound of the source file containing + * the tests during reporting. + * + * default: false + */ bool short_filename; + + /** + * The maximum number of parallel jobs that the test runner will spawn. + * 0 means that this number shall be the number of cores on your system. + * + * default: 0 + */ size_t jobs; + + /** + * Measure and report times. + * + * default: true + */ bool measure_time; }; CR_BEGIN_C_API +/** + * The runtime options for the test runner. + */ extern struct criterion_options criterion_options; CR_END_C_API From 93199a16511b25c13b15d5e401a498aa7423fcf3 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 8 Dec 2015 00:34:14 +0100 Subject: [PATCH 203/211] Added doxygen for output.h --- include/criterion/output.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/include/criterion/output.h b/include/criterion/output.h index a5a0c666..e6366d16 100644 --- a/include/criterion/output.h +++ b/include/criterion/output.h @@ -28,7 +28,23 @@ typedef void criterion_reporter(FILE *stream, struct criterion_global_stats *); +/** + * Register an output provider. + * + * @param[in] name The name the output provider shall be registered as. + * @param[in] reporter The output reporting function. + * @returns 1 if no output provider is registered at that name, 0 otherwise, + * and -1 on error. + */ int criterion_register_output_provider(const char *name, criterion_reporter *reporter); + +/** + * Use an output provider to write a report in a specific path. + * + * @param[in] provider The name of a registered output provider. + * @param[in] path The path to the file to write the report to. + * @returns -1 on error. + */ int criterion_add_output(const char *provider, const char *path); #endif /* !CRITERION_OUTPUT_H_ */ From c681d2a42e06cc2fe9c5e6a5482a596e8747c571 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 8 Dec 2015 00:34:38 +0100 Subject: [PATCH 204/211] Added doxygen for parameterized.h --- include/criterion/internal/parameterized.h | 4 +-- include/criterion/parameterized.h | 41 +++++++++++++++++++++- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/include/criterion/internal/parameterized.h b/include/criterion/internal/parameterized.h index 4fbd5117..29a79575 100644 --- a/include/criterion/internal/parameterized.h +++ b/include/criterion/internal/parameterized.h @@ -104,10 +104,10 @@ struct criterion_test_params { static struct criterion_test_params CR_IDENTIFIER_(Category, Name, param)(void) # ifdef __cplusplus -# define cr_make_param_array(Type, Array, ...) \ +# define cr_make_param_array_(Type, Array, ...) \ criterion_test_params(sizeof (Type), (Array), __VA_ARGS__) # else -# define cr_make_param_array(Type, Array, ...) \ +# define cr_make_param_array_(Type, Array, ...) \ (struct criterion_test_params) { .size = sizeof (Type), (void*)(Array), __VA_ARGS__ } # endif diff --git a/include/criterion/parameterized.h b/include/criterion/parameterized.h index 7099009a..2a9fafff 100644 --- a/include/criterion/parameterized.h +++ b/include/criterion/parameterized.h @@ -28,9 +28,48 @@ # include "assert.h" # include "internal/parameterized.h" +/** + * ParameterizedTest(Type *param, Suite, Name, [Options...]) { Function Body } + * + * Defines a new parameterized test. + * + * A parameterized test only takes one parameter -- to pass multiple parameters, + * use a structure type. + * + * @param Type The type of the parameter. + * @param Suite The name of the test suite containing this test. + * @param Name The name of the test. + * @param Options An optional sequence of designated initializer key/value + * pairs as described in the `criterion_test_extra_data` structure + * (see criterion/types.h). + * Example: .exit_code = 1 + */ # define ParameterizedTest(...) CR_EXPAND(CR_PARAM_TEST_BASE(__VA_ARGS__, .sentinel_ = 0)) -# define ParameterizedTestParameters(Category, Name) CR_PARAM_TEST_PARAMS(Category, Name) +/** + * ParameterizedTestParameters(Suite, Test) { Function Body } + * + * Defines the parameter generator for the associated parameterized test. + * + * @param Suite The name of the test suite containing the test. + * @param Test The name of the test. + * @returns A constructed instance of criterion::parameters, or the result of + * the cr_make_param_array macro. + */ +# define ParameterizedTestParameters(Suite, Name) CR_PARAM_TEST_PARAMS(Suite, Name) + +/** + * cr_make_param_array(Type, Array, Len, [Cleanup]); + * + * Constructs a parameter list used as a return value for a parameter generator. + * + * @param Type The type of the array subscript. + * @param Array The array of parameters. + * @param Len The length of the array. + * @param Cleanup The optional cleanup function for the array. + * @returns The parameter list. + */ +# define cr_make_param_array(...) CR_EXPAND(cr_make_param_array_(__VA_ARGS__)) # ifdef __cplusplus # include <vector> From 046e7abac51ee7a03473756e48df9b7b857069cb Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 8 Dec 2015 00:36:12 +0100 Subject: [PATCH 205/211] Removed objective-c dependency on deb builds & added missing libpcre3 runtime dependency --- .cmake/Modules/DebConfig.cmake | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.cmake/Modules/DebConfig.cmake b/.cmake/Modules/DebConfig.cmake index 83e48a7a..3bbc3737 100644 --- a/.cmake/Modules/DebConfig.cmake +++ b/.cmake/Modules/DebConfig.cmake @@ -8,14 +8,13 @@ set(CPACK_DEBIAN_BUILD_DEPENDS cmake gettext libpcre3-dev - gobjc - gnustep-devel ) -set(CPACK_DEBIAN_CMAKE_OPTIONS - "-DLANG_OBJC=ON" +set(CPACK_DEBIAN_PACKAGE_DEPENDS + libpcre3 ) +set(CPACK_DEBIAN_CMAKE_OPTIONS) set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/description.txt") set(CPACK_DEBIAN_PACKAGE_SOURCE_COPY "${CMAKE_SOURCE_DIR}/.cmake/copy-source.sh") From 0dfd69b4b95a35c309c5d30a8e937209603f9ea6 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 8 Dec 2015 01:10:06 +0100 Subject: [PATCH 206/211] Added doxygen for redirect.h --- include/criterion/redirect.h | 50 ++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/include/criterion/redirect.h b/include/criterion/redirect.h index b93f2a6a..3d26d97d 100644 --- a/include/criterion/redirect.h +++ b/include/criterion/redirect.h @@ -35,17 +35,67 @@ CR_BEGIN_C_API +/** + * Redirect stdout for testing. + */ CR_API void cr_redirect_stdout(void); + +/** + * Redirect stderr for testing. + */ CR_API void cr_redirect_stderr(void); + +/** + * Redirect stdin for testing. + * This is implicitely called before each test. + */ CR_API void cr_redirect_stdin(void); +/** + * Get a file handle representing the read-end of the redirected stdout. + * + * @returns the file handle. + */ CR_API CR_STDN FILE* cr_get_redirected_stdout(void); + +/** + * Get a file handle representing the read-end of the redirected stderr. + * + * @returns the file handle. + */ CR_API CR_STDN FILE* cr_get_redirected_stderr(void); + +/** + * Get a file handle representing the write-end of the redirected stdin. + * + * @returns the file handle. + */ CR_API CR_STDN FILE* cr_get_redirected_stdin(void); +/** + * Compare the contents of a file with a string. + * + * @param[in] f The file to compare the contents to. + * @param[in] str The string to compare the contents to. + * @returns 1 if the contents of the file is equal to the string, 0 otherwise. + */ CR_API int cr_file_match_str(CR_STDN FILE* f, const char *str); + +/** + * Compare the contents of a file with the contents of another file. + * + * @param[in] f The first file to compare the contents to. + * @param[in] ref The second file to compare the contents to. + * @returns 1 if the contents of the files are equal, 0 otherwise. + */ CR_API int cr_file_match_file(CR_STDN FILE* f, CR_STDN FILE* ref); +/** + * Create a file mock. + * + * @param[in] max_size The maximum size in bytes of the file mock. + * @returns the file handle representing the mock. + */ CR_API CR_STDN FILE *cr_mock_file_size(size_t max_size); CR_END_C_API From e7234512edc6fa40d9599cb4522110df5a82c251 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 8 Dec 2015 01:44:42 +0100 Subject: [PATCH 207/211] Added doxygen for theories.h --- include/criterion/theories.h | 43 +++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/include/criterion/theories.h b/include/criterion/theories.h index 711e7b16..52b61832 100644 --- a/include/criterion/theories.h +++ b/include/criterion/theories.h @@ -29,16 +29,57 @@ CR_BEGIN_C_API +/** + * Aborts the current theory iteration. + * This function does not return. + */ CR_API void cr_theory_abort(void); CR_END_C_API // Theory and datapoint macros +/** + * Theory((Params...), Suite, Name, [Options...]) { Function Body } + * + * Defines a new theory test. + * + * The parameters are selected from a cartesian product defined by a + * TheoryDataPoints macro. + * + * @param Params A list of function parameters. + * @param Suite The name of the test suite containing this test. + * @param Name The name of the test. + * @param Options An optional sequence of designated initializer key/value + * pairs as described in the `criterion_test_extra_data` structure + * (see criterion/types.h). + * Example: .exit_code = 1 + */ # define Theory(Args, ...) CR_EXPAND(CR_THEORY_BASE(Args, __VA_ARGS__)) +/** + * TheoryDataPoints(Suite, Name) = { Datapoints... }; + * + * Defines an array of data points. + * + * The types of the specified data points *must* match the types of the + * associated theory. + * + * Each entry in the array must be the result of the DataPoints macro. + * + * @param Suite The name of the test suite containing this test. + * @param Name The name of the test. + */ # define TheoryDataPoints(Category, Name) CR_TH_INTERNAL_TDPS(Category, Name) -# define TheoryDataPoint(Category, Name) CR_TH_INTERNAL_TDP(Category, Name) + +/** + * DataPoints(Type, Values...) + * + * Defines a new set of data points. + * + * @param Type The type of each data point in the set. + * @param Values The data points in the set. + */ # define DataPoints(Type, ...) CR_EXPAND(CR_TH_INTERNAL_DP(Type, __VA_ARGS__)) // Theory invariants From 6c248da32159dd6b58dc3812b53e2a0c400c5185 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 8 Dec 2015 01:46:49 +0100 Subject: [PATCH 208/211] Removed Theory data point generation --- samples/tests/theories_regression.c | 17 ----------------- samples/tests/theories_regression.cc | 17 ----------------- samples/theories.c | 17 ----------------- samples/theories.cc | 17 ----------------- 4 files changed, 68 deletions(-) diff --git a/samples/tests/theories_regression.c b/samples/tests/theories_regression.c index 6661f9fd..bcb953e5 100644 --- a/samples/tests/theories_regression.c +++ b/samples/tests/theories_regression.c @@ -33,20 +33,3 @@ Theory((char c, bool b, short s, int i, float f, double d, char *str, const char // abort to see the formatted string of all parameters cr_assert_fail(); } - -// Manually generate datapoints - -TheoryDataPoints(theory, gen) = { - DataPoints(int, 0), // placeholder -}; - -static void generate_datapoints(void) { - static int arr[] = {1, 2, 3, 4, 5}; - TheoryDataPoint(theory, gen)[0].len = 5; - TheoryDataPoint(theory, gen)[0].arr = &arr; -} - -Theory((int i), theory, gen, .init = generate_datapoints) { - (void) i; - cr_assert_fail(); // we fail to display the parameter -} diff --git a/samples/tests/theories_regression.cc b/samples/tests/theories_regression.cc index 608954fe..75fdc0dc 100644 --- a/samples/tests/theories_regression.cc +++ b/samples/tests/theories_regression.cc @@ -35,20 +35,3 @@ Theory((char c, bool b, short s, int i, float f, double d, char *str, const char // abort to see the formatted string of all parameters cr_assert_fail(); } - -// Manually generate datapoints - -TheoryDataPoints(theory, gen) = { - DataPoints(int, 0), // placeholder -}; - -static void generate_datapoints(void) { - static int arr[] = {1, 2, 3, 4, 5}; - TheoryDataPoint(theory, gen)[0].len = 5; - TheoryDataPoint(theory, gen)[0].arr = &arr; -} - -Theory((int i), theory, gen, .init = generate_datapoints) { - (void) i; - cr_assert_fail(); // we fail to display the parameter -} diff --git a/samples/theories.c b/samples/theories.c index c918f4a7..055811f7 100644 --- a/samples/theories.c +++ b/samples/theories.c @@ -105,20 +105,3 @@ Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, // abort to see the formatted string of all parameters cr_assert_fail(); } - -// Manually generate datapoints - -TheoryDataPoints(theory, gen) = { - DataPoints(int, 0), // placeholder -}; - -static void generate_datapoints(void) { - static int arr[] = {1, 2, 3, 4, 5}; - TheoryDataPoint(theory, gen)[0].len = 5; - TheoryDataPoint(theory, gen)[0].arr = &arr; -} - -Theory((int i), theory, gen, .init = generate_datapoints) { - (void) i; - cr_assert_fail(); // we fail to display the parameter -} diff --git a/samples/theories.cc b/samples/theories.cc index 4ee981bf..b79cb006 100644 --- a/samples/theories.cc +++ b/samples/theories.cc @@ -113,20 +113,3 @@ Theory((char c, bool b, short s, int i, long l, long long ll, float f, double d, // abort to see the formatted string of all parameters cr_assert_fail(); } - -// Manually generate datapoints - -TheoryDataPoints(theory, gen) = { - DataPoints(int, 0), // placeholder -}; - -static void generate_datapoints(void) { - static int arr[] = {1, 2, 3, 4, 5}; - TheoryDataPoint(theory, gen)[0].len = 5; - TheoryDataPoint(theory, gen)[0].arr = &arr; -} - -Theory((int i), theory, gen, .init = generate_datapoints) { - (void) i; - cr_assert_fail(); // we fail to display the parameter -} From df7d47f184cb2ef822597b68d949b0d93440e8fe Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 8 Dec 2015 01:56:01 +0100 Subject: [PATCH 209/211] Fixed theories regression tests --- .../outputs/theories_regression.c.bin.err.expected | 13 +------------ .../outputs/theories_regression.cc.bin.err.expected | 13 +------------ 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/samples/tests/outputs/theories_regression.c.bin.err.expected b/samples/tests/outputs/theories_regression.c.bin.err.expected index fa88f2bb..1262f800 100644 --- a/samples/tests/outputs/theories_regression.c.bin.err.expected +++ b/samples/tests/outputs/theories_regression.c.bin.err.expected @@ -1,15 +1,4 @@ -[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m51[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) -[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m51[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) -[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m51[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) -[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m51[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) -[[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m51[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) -[[0;31mFAIL[0m] theory::gen [[0;34m----[0m] [0;1mtheories_regression.c[0m:[0;31m34[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 3.14f, 3.14, "test", "other test") [[0;31mFAIL[0m] theory::misc -[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m0[0;1m [0m +[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m1[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m1[0;1m | Crashing: [0;31m0[0;1m [0m diff --git a/samples/tests/outputs/theories_regression.cc.bin.err.expected b/samples/tests/outputs/theories_regression.cc.bin.err.expected index 03039376..e149d586 100644 --- a/samples/tests/outputs/theories_regression.cc.bin.err.expected +++ b/samples/tests/outputs/theories_regression.cc.bin.err.expected @@ -1,15 +1,4 @@ -[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m53[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (1) -[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m53[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (2) -[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m53[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (3) -[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m53[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (4) -[[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m53[0m: Assertion failed: The conditions for this assertion were not met. -[[0;34m----[0m] Theory theory::gen failed with the following parameters: (5) -[[0;31mFAIL[0m] theory::gen [[0;34m----[0m] [0;1mtheories_regression.cc[0m:[0;31m36[0m: Assertion failed: The conditions for this assertion were not met. [[0;34m----[0m] Theory theory::misc failed with the following parameters: ('a', true, 1, 1, 3.14f, 3.14, "test", "other test") [[0;31mFAIL[0m] theory::misc -[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m2[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m2[0;1m | Crashing: [0;31m0[0;1m [0m +[[0;34m====[0m] [0;1mSynthesis: Tested: [0;34m1[0;1m | Passing: [0;32m0[0;1m | Failing: [0;31m1[0;1m | Crashing: [0;31m0[0;1m [0m From f9139404275e963e3fa18448c9c742ba8073b34f Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 8 Dec 2015 02:36:23 +0100 Subject: [PATCH 210/211] Fixed decoupling for parameterized tests and fixed missing definitions --- CMakeLists.txt | 1 + include/criterion/abort.h | 2 + include/criterion/internal/parameterized.h | 3 +- include/criterion/internal/test.h | 108 ++++++++++----------- src/core/abort.h | 2 - src/core/test.c | 1 + 6 files changed, 60 insertions(+), 57 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 67dfe4eb..830c5d28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,6 +147,7 @@ set(SOURCE_FILES src/core/stats.c src/core/stats.h src/core/ordered-set.c + src/core/test.c src/compat/internal.h src/compat/pipe.c src/compat/pipe.h diff --git a/include/criterion/abort.h b/include/criterion/abort.h index d6a649e6..9cfc9254 100644 --- a/include/criterion/abort.h +++ b/include/criterion/abort.h @@ -31,6 +31,8 @@ CR_BEGIN_C_API CR_API CR_NORETURN void criterion_abort_test(void); CR_INLINE static void criterion_continue_test(void) {} +CR_API void criterion_test_die(const char *msg, ...); + CR_END_C_API #endif /* !CRITERION_ABORT_H_ */ diff --git a/include/criterion/internal/parameterized.h b/include/criterion/internal/parameterized.h index 4fbd5117..c08ee0d1 100644 --- a/include/criterion/internal/parameterized.h +++ b/include/criterion/internal/parameterized.h @@ -79,6 +79,7 @@ struct criterion_test_params { # define CR_PARAM_TEST_BASE(Param, Category, Name, ...) \ CR_PARAM_TEST_PROTOTYPE_(Param, Category, Name); \ + CR_TEST_TRAMPOLINE_(Category, Name) \ struct criterion_test_extra_data CR_IDENTIFIER_(Category, Name, extra) = \ CR_EXPAND(CRITERION_MAKE_STRUCT(criterion_test_extra_data, \ .lang_ = CR_LANG, \ @@ -92,7 +93,7 @@ struct criterion_test_params { struct criterion_test CR_IDENTIFIER_(Category, Name, meta) = { \ #Name, \ #Category, \ - (void(*)(void)) CR_IDENTIFIER_(Category, Name, impl), \ + CR_IDENTIFIER_(Category, Name, jmp), \ &CR_IDENTIFIER_(Category, Name, extra) \ }; \ CR_SECTION_("cr_tst") \ diff --git a/include/criterion/internal/test.h b/include/criterion/internal/test.h index 9a2f526f..35b49ae1 100644 --- a/include/criterion/internal/test.h +++ b/include/criterion/internal/test.h @@ -79,65 +79,65 @@ static const char *const cr_msg_test_fini_std_exception = "Caught an unexpected static const char *const cr_msg_test_fini_other_exception = "Caught some unexpected exception during the test finalization."; # ifdef __cplusplus -# define CR_TEST_TRAMPOLINE_(Category, Name) \ - static inline void CR_IDENTIFIER_(Category, Name, jmp)(void) { \ - try { \ - criterion_internal_test_setup(); \ - } catch (const std::exception &e) { \ - criterion_test_die(cr_msg_test_init_std_exception, e.what()); \ - } catch (...) { \ - criterion_test_die(cr_msg_test_init_other_exception); \ - } \ - try { \ - criterion_internal_test_main(CR_IDENTIFIER_(Category, Name, impl)); \ - } catch (const std::exception &e) { \ - criterion_test_die(cr_msg_test_main_std_exception, e.what()); \ - } catch (...) { \ - criterion_test_die(cr_msg_test_main_other_exception); \ - } \ - try { \ - criterion_internal_test_teardown(); \ - } catch (const std::exception &e) { \ - criterion_test_die(cr_msg_test_fini_std_exception, e.what()); \ - } catch (...) { \ - criterion_test_die(cr_msg_test_fini_other_exception); \ - } \ +# define CR_TEST_TRAMPOLINE_(Category, Name) \ + static inline void CR_IDENTIFIER_(Category, Name, jmp)(void) { \ + try { \ + criterion_internal_test_setup(); \ + } catch (const std::exception &e) { \ + criterion_test_die(cr_msg_test_init_std_exception, e.what()); \ + } catch (...) { \ + criterion_test_die(cr_msg_test_init_other_exception); \ + } \ + try { \ + criterion_internal_test_main((void(*)(void)) CR_IDENTIFIER_(Category, Name, impl)); \ + } catch (const std::exception &e) { \ + criterion_test_die(cr_msg_test_main_std_exception, e.what()); \ + } catch (...) { \ + criterion_test_die(cr_msg_test_main_other_exception); \ + } \ + try { \ + criterion_internal_test_teardown(); \ + } catch (const std::exception &e) { \ + criterion_test_die(cr_msg_test_fini_std_exception, e.what()); \ + } catch (...) { \ + criterion_test_die(cr_msg_test_fini_other_exception); \ + } \ } # else # if defined(__OBJC__) && defined(__EXCEPTIONS) -# define CR_TEST_TRAMPOLINE_(Category, Name) \ - static inline void CR_IDENTIFIER_(Category, Name, jmp)(void) { \ - @try { \ - criterion_internal_test_setup(); \ - } @catch (NSException *e) { \ - NSString *reason = [e reason]; \ - criterion_test_die(cr_msg_test_init_std_exception, [reason UTF8String]); \ - } @catch (...) { \ - criterion_test_die(cr_msg_test_init_other_exception); \ - } \ - @try { \ - criterion_internal_test_main(CR_IDENTIFIER_(Category, Name, impl)); \ - } @catch (NSException *e) { \ - NSString *reason = [e reason]; \ - criterion_test_die(cr_msg_test_main_std_exception, [reason UTF8String]); \ - } @catch (...) { \ - criterion_test_die(cr_msg_test_main_other_exception); \ - } \ - @try { \ - criterion_internal_test_teardown(); \ - } @catch (NSException *e) { \ - NSString *reason = [e reason]; \ - criterion_test_die(cr_msg_test_fini_std_exception, [reason UTF8String]); \ - } @catch (...) { \ - criterion_test_die(cr_msg_test_fini_other_exception); \ - } \ +# define CR_TEST_TRAMPOLINE_(Category, Name) \ + static inline void CR_IDENTIFIER_(Category, Name, jmp)(void) { \ + @try { \ + criterion_internal_test_setup(); \ + } @catch (NSException *e) { \ + NSString *reason = [e reason]; \ + criterion_test_die(cr_msg_test_init_std_exception, [reason UTF8String]); \ + } @catch (...) { \ + criterion_test_die(cr_msg_test_init_other_exception); \ + } \ + @try { \ + criterion_internal_test_main((void(*)(void)) CR_IDENTIFIER_(Category, Name, impl)); \ + } @catch (NSException *e) { \ + NSString *reason = [e reason]; \ + criterion_test_die(cr_msg_test_main_std_exception, [reason UTF8String]); \ + } @catch (...) { \ + criterion_test_die(cr_msg_test_main_other_exception); \ + } \ + @try { \ + criterion_internal_test_teardown(); \ + } @catch (NSException *e) { \ + NSString *reason = [e reason]; \ + criterion_test_die(cr_msg_test_fini_std_exception, [reason UTF8String]); \ + } @catch (...) { \ + criterion_test_die(cr_msg_test_fini_other_exception); \ + } \ } # else -# define CR_TEST_TRAMPOLINE_(Category, Name) \ - static inline void CR_IDENTIFIER_(Category, Name, jmp)(void) { \ - criterion_internal_test_setup(); \ - criterion_internal_test_main(CR_IDENTIFIER_(Category, Name, impl)); \ - criterion_internal_test_teardown(); \ +# define CR_TEST_TRAMPOLINE_(Category, Name) \ + static inline void CR_IDENTIFIER_(Category, Name, jmp)(void) { \ + criterion_internal_test_setup(); \ + criterion_internal_test_main((void(*)(void)) CR_IDENTIFIER_(Category, Name, impl)); \ + criterion_internal_test_teardown(); \ } # endif # endif diff --git a/src/core/abort.h b/src/core/abort.h index 401f09b7..064fe67d 100644 --- a/src/core/abort.h +++ b/src/core/abort.h @@ -29,6 +29,4 @@ extern jmp_buf g_pre_test; -void criterion_test_die(const char *msg, ...); - #endif /* !ABORT_H_ */ diff --git a/src/core/test.c b/src/core/test.c index 02a4578a..4295360d 100644 --- a/src/core/test.c +++ b/src/core/test.c @@ -21,6 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ +#include "criterion/internal/test.h" #include "core/abort.h" #include "core/stats.h" #include "core/worker.h" From ac2f5e1bce6b465d15cf26dd130eadace303b388 Mon Sep 17 00:00:00 2001 From: Snaipe <franklinmathieu@gmail.com> Date: Tue, 8 Dec 2015 03:12:05 +0100 Subject: [PATCH 211/211] Removed Objective-C compiler modules --- .../CMakeDetermineObjectiveCCompiler.cmake | 19 -- .../Modules/CMakeObjectiveCCompiler.cmake.in | 10 - .../Modules/CMakeObjectiveCInformation.cmake | 192 ------------------ .../Modules/CMakeTestObjectiveCCompiler.cmake | 64 ------ .cmake/Modules/Languages.cmake | 17 -- CMakeLists.txt | 21 +- src/config.h.in | 7 - 7 files changed, 5 insertions(+), 325 deletions(-) delete mode 100644 .cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake delete mode 100644 .cmake/Modules/CMakeObjectiveCCompiler.cmake.in delete mode 100644 .cmake/Modules/CMakeObjectiveCInformation.cmake delete mode 100644 .cmake/Modules/CMakeTestObjectiveCCompiler.cmake delete mode 100644 .cmake/Modules/Languages.cmake diff --git a/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake b/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake deleted file mode 100644 index 9a9680a5..00000000 --- a/.cmake/Modules/CMakeDetermineObjectiveCCompiler.cmake +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (C) 2015 Franklin "Snaipe" Mathieu. -# Redistribution and use of this file is allowed according to the terms of the MIT license. -# For details see the LICENSE file distributed with Criterion. - -# CMake <2.8.10 backward compat -if(NOT CMAKE_PLATFORM_INFO_DIR) - set(CMAKE_PLATFORM_INFO_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}) -endif(NOT CMAKE_PLATFORM_INFO_DIR) - -set(CMAKE_ObjectiveC_COMPILER_ID ${CMAKE_C_COMPILER_ID}) -set(CMAKE_ObjectiveC_COMPILER ${CMAKE_C_COMPILER}) - -# configure variables set in this file for fast reload later on -configure_file(${CMAKE_CURRENT_LIST_DIR}/CMakeObjectiveCCompiler.cmake.in - ${CMAKE_PLATFORM_INFO_DIR}/CMakeObjectiveCCompiler.cmake - @ONLY - ) - -set(CMAKE_ObjectiveC_COMPILER_ENV_VAR "OBJCC") diff --git a/.cmake/Modules/CMakeObjectiveCCompiler.cmake.in b/.cmake/Modules/CMakeObjectiveCCompiler.cmake.in deleted file mode 100644 index ab197365..00000000 --- a/.cmake/Modules/CMakeObjectiveCCompiler.cmake.in +++ /dev/null @@ -1,10 +0,0 @@ -set(CMAKE_ObjectiveC_COMPILER "@CMAKE_ObjectiveC_COMPILER@") -set(CMAKE_ObjectiveC_COMPILER_ID "@CMAKE_ObjectiveC_COMPILER_ID@") - -set(CMAKE_ObjectiveC_IMPLICIT_LINK_LIBRARIES "@CMAKE_ObjectiveC_IMPLICIT_LINK_LIBRARIES@") - -set(CMAKE_ObjectiveC_COMPILER_LOADED 1) -set(CMAKE_ObjectiveC_COMPILER_WORKS @CMAKE_ObjectiveC_COMPILER_WORKS@) - -set(CMAKE_ObjectiveC_COMPILER_ID_RUN 1) -set(CMAKE_ObjectiveC_SOURCE_FILE_EXTENSIONS m) diff --git a/.cmake/Modules/CMakeObjectiveCInformation.cmake b/.cmake/Modules/CMakeObjectiveCInformation.cmake deleted file mode 100644 index 1a49d7c4..00000000 --- a/.cmake/Modules/CMakeObjectiveCInformation.cmake +++ /dev/null @@ -1,192 +0,0 @@ -if(UNIX) - set(CMAKE_ObjectiveC_OUTPUT_EXTENSION .o) -else() - set(CMAKE_ObjectiveC_OUTPUT_EXTENSION .obj) -endif() - -set(_INCLUDED_FILE 0) -set(_INCLUDED_FILE_2 0) - -# Load compiler-specific information. -if(CMAKE_ObjectiveC_COMPILER_ID) - include(Compiler/${CMAKE_ObjectiveC_COMPILER_ID}-C OPTIONAL) -endif() - -set(CMAKE_BASE_NAME) -get_filename_component(CMAKE_BASE_NAME "${CMAKE_ObjectiveC_COMPILER}" NAME_WE) - -# load a hardware specific file, mostly useful for embedded compilers -if(CMAKE_SYSTEM_PROCESSOR) - if(CMAKE_ObjectiveC_COMPILER_ID) - include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_ObjectiveC_COMPILER_ID}-C-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) - include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_ObjectiveC_COMPILER_ID}-ObjectiveC-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE_2) - endif() - if (NOT _INCLUDED_FILE AND NOT _INCLUDED_FILE_2) - include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL) - endif () -endif() - -# load the system- and compiler specific files -if(CMAKE_ObjectiveC_COMPILER_ID) - include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_ObjectiveC_COMPILER_ID}-C - OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) - include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_ObjectiveC_COMPILER_ID}-ObjectiveC - OPTIONAL RESULT_VARIABLE _INCLUDED_FILE_2) -endif() -if (NOT _INCLUDED_FILE AND _INCLUDED_FILE_2) - include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} - OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) -endif () - -# We specify the compiler information in the system file for some -# platforms, but this language may not have been enabled when the file -# was first included. Include it again to get the language info. -# Remove this when all compiler info is removed from system files. -if (NOT _INCLUDED_FILE) - include(Platform/${CMAKE_SYSTEM_NAME} OPTIONAL) -endif () - -if(CMAKE_ObjectiveC_COMPILER_LINKS_STATICALLY) - set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) -endif() - -# This should be included before the _INIT variables are -# used to initialize the cache. Since the rule variables -# have if blocks on them, users can still define them here. -# But, it should still be after the platform file so changes can -# be made to those values. - -if(CMAKE_USER_MAKE_RULES_OVERRIDE) - # Save the full path of the file so try_compile can use it. - include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override) - set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}") -endif() - -if(CMAKE_USER_MAKE_RULES_OVERRIDE_ObjectiveC) - # Save the full path of the file so try_compile can use it. - include(${CMAKE_USER_MAKE_RULES_OVERRIDE_ObjectiveC} RESULT_VARIABLE _override) - set(CMAKE_USER_MAKE_RULES_OVERRIDE_ObjectiveC "${_override}") -endif() - - -# for most systems a module is the same as a shared library -# so unless the variable CMAKE_MODULE_EXISTS is set just -# copy the values from the LIBRARY variables -if(NOT CMAKE_MODULE_EXISTS) - set(CMAKE_SHARED_MODULE_ObjectiveC_FLAGS ${CMAKE_SHARED_LIBRARY_ObjectiveC_FLAGS}) - set(CMAKE_SHARED_MODULE_CREATE_ObjectiveC_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_ObjectiveC_FLAGS}) -endif() - -if(NOT CMAKE_NOT_USING_CONFIG_FLAGS) -# default build type is none - if(NOT CMAKE_NO_BUILD_TYPE) - set (CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_INIT} CACHE STRING - "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.") - endif() - set (CMAKE_ObjectiveC_FLAGS_DEBUG "${CMAKE_ObjectiveC_FLAGS_DEBUG_INIT}" CACHE STRING - "Flags used by the compiler during debug builds.") - set (CMAKE_ObjectiveC_FLAGS_MINSIZEREL "${CMAKE_ObjectiveC_FLAGS_MINSIZEREL_INIT}" CACHE STRING - "Flags used by the compiler during release builds for minimum size.") - set (CMAKE_ObjectiveC_FLAGS_RELEASE "${CMAKE_ObjectiveC_FLAGS_RELEASE_INIT}" CACHE STRING - "Flags used by the compiler during release builds.") - set (CMAKE_ObjectiveC_FLAGS_RELWITHDEBINFO "${CMAKE_ObjectiveC_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING - "Flags used by the compiler during release builds with debug info.") -endif() - -if(CMAKE_ObjectiveC_STANDARD_LIBRARIES_INIT) - set(CMAKE_ObjectiveC_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES_INIT}" - CACHE STRING "Libraries linked by default with all C applications.") - mark_as_advanced(CMAKE_ObjectiveC_STANDARD_LIBRARIES) -endif() - -include(CMakeCommonLanguageInclude) - -# now define the following rule variables - -# CMAKE_ObjectiveC_CREATE_SHARED_LIBRARY -# CMAKE_ObjectiveC_CREATE_SHARED_MODULE -# CMAKE_ObjectiveC_COMPILE_OBJECT -# CMAKE_ObjectiveC_LINK_EXECUTABLE - -# variables supplied by the generator at use time -# <TARGET> -# <TARGET_BASE> the target without the suffix -# <OBJECTS> -# <OBJECT> -# <LINK_LIBRARIES> -# <FLAGS> -# <LINK_FLAGS> - -# C compiler information -# <CMAKE_ObjectiveC_COMPILER> -# <CMAKE_SHARED_LIBRARY_CREATE_ObjectiveC_FLAGS> -# <CMAKE_SHARED_MODULE_CREATE_ObjectiveC_FLAGS> -# <CMAKE_ObjectiveC_LINK_FLAGS> - -# Static library tools -# <CMAKE_AR> -# <CMAKE_RANLIB> - - -# create a C shared library -if(NOT CMAKE_ObjectiveC_CREATE_SHARED_LIBRARY) - set(CMAKE_ObjectiveC_CREATE_SHARED_LIBRARY - "<CMAKE_ObjectiveC_COMPILER> <CMAKE_SHARED_LIBRARY_ObjectiveC_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_ObjectiveC_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") -endif() - -# create a C shared module just copy the shared library rule -if(NOT CMAKE_ObjectiveC_CREATE_SHARED_MODULE) - set(CMAKE_ObjectiveC_CREATE_SHARED_MODULE ${CMAKE_ObjectiveC_CREATE_SHARED_LIBRARY}) -endif() - -# Create a static archive incrementally for large object file counts. -# If CMAKE_ObjectiveC_CREATE_STATIObjectiveC_LIBRARY is set it will override these. -if(NOT DEFINED CMAKE_ObjectiveC_ARCHIVE_CREATE) - set(CMAKE_ObjectiveC_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>") -endif() -if(NOT DEFINED CMAKE_ObjectiveC_ARCHIVE_APPEND) - set(CMAKE_ObjectiveC_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>") -endif() -if(NOT DEFINED CMAKE_ObjectiveC_ARCHIVE_FINISH) - set(CMAKE_ObjectiveC_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>") -endif() - -set(CMAKE_INCLUDE_FLAG_ObjectiveC "-I") -set(CMAKE_ObjectiveC_IMPLICIT_LINK_LIBRARIES objc) - -# compile a C file into an object file -if(NOT CMAKE_ObjectiveC_COMPILE_OBJECT) - if("${CMAKE_VERSION}" VERSION_GREATER 3.3.2) - set(CMAKE_ObjectiveC_COMPILE_OBJECT - "<CMAKE_ObjectiveC_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>") - else () - set(CMAKE_ObjectiveC_COMPILE_OBJECT - "<CMAKE_ObjectiveC_COMPILER> <DEFINES> <FLAGS> -o <OBJECT> -c <SOURCE>") - endif () -endif() - -if(NOT CMAKE_ObjectiveC_LINK_EXECUTABLE) - set(CMAKE_ObjectiveC_LINK_EXECUTABLE - "<CMAKE_ObjectiveC_COMPILER> <FLAGS> <CMAKE_ObjectiveC_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>") -endif() - -if(NOT CMAKE_EXECUTABLE_RUNTIME_ObjectiveC_FLAG) - set(CMAKE_EXECUTABLE_RUNTIME_ObjectiveC_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_ObjectiveC_FLAG}) -endif() - -if(NOT CMAKE_EXECUTABLE_RUNTIME_ObjectiveC_FLAG_SEP) - set(CMAKE_EXECUTABLE_RUNTIME_ObjectiveC_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_ObjectiveC_FLAG_SEP}) -endif() - -if(NOT CMAKE_EXECUTABLE_RPATH_LINK_ObjectiveC_FLAG) - set(CMAKE_EXECUTABLE_RPATH_LINK_ObjectiveC_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_ObjectiveC_FLAG}) -endif() - -mark_as_advanced( - CMAKE_ObjectiveC_FLAGS - CMAKE_ObjectiveC_FLAGS_DEBUG - CMAKE_ObjectiveC_FLAGS_MINSIZEREL - CMAKE_ObjectiveC_FLAGS_RELEASE - CMAKE_ObjectiveC_FLAGS_RELWITHDEBINFO -) -set(CMAKE_ObjectiveC_INFORMATION_LOADED 1) diff --git a/.cmake/Modules/CMakeTestObjectiveCCompiler.cmake b/.cmake/Modules/CMakeTestObjectiveCCompiler.cmake deleted file mode 100644 index a32b33f1..00000000 --- a/.cmake/Modules/CMakeTestObjectiveCCompiler.cmake +++ /dev/null @@ -1,64 +0,0 @@ -if(CMAKE_ObjectiveC_COMPILER_FORCED) - # The compiler configuration was forced by the user. - # Assume the user has configured all compiler information. - set(CMAKE_ObjectiveC_COMPILER_WORKS TRUE) - return() -endif() - -include(CMakeTestCompilerCommon) - -# Remove any cached result from an older CMake version. -# We now store this in CMakeCCompiler.cmake. -unset(CMAKE_ObjectiveC_COMPILER_WORKS CACHE) - -# This file is used by EnableLanguage in cmGlobalGenerator to -# determine that that selected C compiler can actually compile -# and link the most basic of programs. If not, a fatal error -# is set and cmake stops processing commands and will not generate -# any makefiles or projects. -if(NOT CMAKE_ObjectiveC_COMPILER_WORKS) - PrintTestCompilerStatus("ObjectiveC" "") - file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testObjectiveCCompiler.m - "#ifdef __cplusplus\n" - "# error \"The CMAKE_ObjectiveC_COMPILER is set to an ObjectiveC++ compiler\"\n" - "#endif\n" - "@interface Foo\n" - "@end\n" - "int main(int argc, char* argv[])\n" - "{ (void)argv; return argc-1;}\n") -try_compile(CMAKE_ObjectiveC_COMPILER_WORKS ${CMAKE_BINARY_DIR} - ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testObjectiveCCompiler.m - OUTPUT_VARIABLE __CMAKE_ObjectiveC_COMPILER_OUTPUT) - # Move result from cache to normal variable. - set(CMAKE_ObjectiveC_COMPILER_WORKS ${CMAKE_ObjectiveC_COMPILER_WORKS}) - unset(CMAKE_ObjectiveC_COMPILER_WORKS CACHE) - set(ObjectiveC_TEST_WAS_RUN 1) -endif() - -if(NOT CMAKE_ObjectiveC_COMPILER_WORKS) - PrintTestCompilerStatus("ObjectiveC" " -- broken") - file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log - "Determining if the ObjectiveC compiler works failed with " - "the following output:\n${__CMAKE_ObjectiveC_COMPILER_OUTPUT}\n\n") -message(FATAL_ERROR "The ObjectiveC compiler \"${CMAKE_ObjectiveC_COMPILER}\" " - "is not able to compile a simple test program.\nIt fails " - "with the following output:\n ${__CMAKE_ObjectiveC_COMPILER_OUTPUT}\n\n" - "CMake will not be able to correctly generate this project.") -else() - if(ObjectiveC_TEST_WAS_RUN) - PrintTestCompilerStatus("ObjectiveC" " -- works") - file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log - "Determining if the ObjectiveC compiler works passed with " - "the following output:\n${__CMAKE_ObjectiveC_COMPILER_OUTPUT}\n\n") - endif() - - # Re-configure file - configure_file( - ${CMAKE_CURRENT_LIST_DIR}/CMakeObjectiveCCompiler.cmake.in - ${CMAKE_PLATFORM_INFO_DIR}/CMakeObjectiveCCompiler.cmake - @ONLY - ) - include(${CMAKE_PLATFORM_INFO_DIR}/CMakeObjectiveCCompiler.cmake) -endif() - -unset(__CMAKE_ObjectiveC_COMPILER_OUTPUT) diff --git a/.cmake/Modules/Languages.cmake b/.cmake/Modules/Languages.cmake deleted file mode 100644 index 615d0670..00000000 --- a/.cmake/Modules/Languages.cmake +++ /dev/null @@ -1,17 +0,0 @@ - -option(LANG_CXX "Turn on C++ support" ON) -option(LANG_OBJC "Turn on Objective-C support" OFF) - -if (LANG_CXX) - enable_language(CXX) - if (CMAKE_CXX_COMPILER_WORKS) - set(CXX_BRIDGE 1) - endif () -endif () - -if (LANG_OBJC) - enable_language(ObjectiveC) - if (CMAKE_ObjectiveC_COMPILER_WORKS) - set(OBJC_BRIDGE 1) - endif () -endif () diff --git a/CMakeLists.txt b/CMakeLists.txt index 830c5d28..ae77f5ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,12 +43,13 @@ if (MSVC) include_directories(dependencies/wingetopt/src/) endif () -# Language support - -include(Languages) - # Check for C++11 +option(LANG_CXX "Turn on C++ support" ON) +if (LANG_CXX) + enable_language(CXX) +endif () + if (NOT MSVC AND CMAKE_CXX_COMPILER_WORKS) include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) @@ -201,18 +202,6 @@ if (PCRE_FOUND) set(HAVE_PCRE 1) endif () -if (CMAKE_ObjectiveC_COMPILER_WORKS) - set(CMAKE_ObjectiveC_FLAGS "${CMAKE_ObjectiveC_FLAGS} ${CMAKE_C_FLAGS} -fobjc-exceptions") - if ("${CMAKE_ObjectiveC_COMPILER_ID}" STREQUAL "Clang" AND APPLE) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Foundation") - endif () - add_definitions(-D_NATIVE_OBJC_EXCEPTIONS) - - if (NOT WIN32) - set(CMAKE_ObjectiveC_FLAGS "${CMAKE_ObjectiveC_FLAGS} -fPIC") - endif () -endif () - set(INTERFACE_FILES include/criterion/assert.h include/criterion/abort.h diff --git a/src/config.h.in b/src/config.h.in index fb151cbd..0040dad9 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -7,13 +7,6 @@ #cmakedefine MINGW_DEFINE_OFF_T @MINGW_DEFINE_OFF_T@ #cmakedefine01 HAVE_STRTOK_S -#cmakedefine CXX_BRIDGE @CXX_BRIDGE@ -#cmakedefine OBJECTIVEC_BRIDGE @OBJECTIVEC_BRIDGE@ - -# ifdef OBJECTIVEC_BRIDGE -# define OBJC_BRIDGE OBJECTIVEC_BRIDGE -# endif - # define LOCALEDIR "${LOCALEDIR}" # define PACKAGE "${PROJECT_NAME}" # define VERSION "${PROJECT_VERSION}"