diff --git a/tools/qfcc/test/test-bi.c b/tools/qfcc/test/test-bi.c index a13cf9ee7..28d1bcc35 100644 --- a/tools/qfcc/test/test-bi.c +++ b/tools/qfcc/test/test-bi.c @@ -96,15 +96,27 @@ bi_remove (progs_t *pr, void *data) ED_Free (pr, ed); } +static void +bi_ptr_valid (progs_t *pr, void *data) +{ + pr_ptr_t ptr = P_POINTER (pr, 0); + R_INT (pr) = 1; + // check for null pointers (or nearly null) + R_INT (pr) &= !(ptr < pr->null_size); + // pointer is too large + R_INT (pr) &= !(ptr >= pr->globals_size); +} + #define bi(x,np,params...) {#x, bi_##x, -1, np, {params}} #define p(type) PR_PARAM(type) static builtin_t builtins[] = { - bi(printf, -2, p(string)), - bi(errno, 0), - bi(strerror, 1, p(int)), - bi(exit, 1, p(int)), - bi(spawn, 0), - bi(remove, 1, p(entity)), + bi(printf, -2, p(string)), + bi(errno, 0), + bi(strerror, 1, p(int)), + bi(exit, 1, p(int)), + bi(spawn, 0), + bi(remove, 1, p(entity)), + bi(ptr_valid, 1, p(ptr)), {0} }; diff --git a/tools/qfcc/test/test-harness.h b/tools/qfcc/test/test-harness.h index 51c5bde12..2cec7c574 100644 --- a/tools/qfcc/test/test-harness.h +++ b/tools/qfcc/test/test-harness.h @@ -7,5 +7,6 @@ void traceon (void) = #0; void traceoff (void) = #0; entity spawn (void) = #0; void remove (entity e) = #0; +int ptr_valid (void *ptr) = #0; id obj_msgSend (id receiver, SEL op, ...) = #0; void __obj_exec_class (struct obj_module *msg) = #0;