To test a function that can return a locked struct or NULL, a macro has to be invented. Add a test case for that. Signed-off-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> --- This is a bit awkward but I don't see any good way to do it differently since otherwise we'd have to track the assignment. validation/context-vars.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) --- sparse.orig/validation/context-vars.c 2008-04-27 14:10:37.000000000 +0200 +++ sparse/validation/context-vars.c 2008-04-27 14:14:25.000000000 +0200 @@ -1,3 +1,5 @@ +#include <stddef.h> + static void a(void *p) __attribute__((context(p,0,1))) { __context__(p,1); @@ -159,13 +161,31 @@ static void good_locked_val(void) ; } + +extern struct test *_search(int key); + +#define search(res, key) do {\ + res = _search((key)); \ + (res ? ({ __context__(&res->lock,1); res; }) : NULL); \ + } while (0) + +static void test(void) +{ + struct test *x; + + search(x, 32); + if (x) + unlock(x); +} + + /* * check-name: Check -Wcontext with lock variables * * check-error-start -context-vars.c:53:7: warning: context imbalance in 'warn_lock1': wrong count at exit -context-vars.c:53:7: context '**v+4': wanted 0, got 1 -context-vars.c:137:11: warning: context problem in 'warn_unlock': 'unlock' expected different context -context-vars.c:137:11: context '*t+0': wanted >= 1, got 0 +context-vars.c:55:7: warning: context imbalance in 'warn_lock1': wrong count at exit +context-vars.c:55:7: context '**v+4': wanted 0, got 1 +context-vars.c:139:11: warning: context problem in 'warn_unlock': 'unlock' expected different context +context-vars.c:139:11: context '*t+0': wanted >= 1, got 0 * check-error-end */ -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html