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> --- The macro was a mess, this one's much better. The key is to pass in the result variable and use it in __context__. validation/context-vars.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 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:41:41.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,32 @@ static void good_locked_val(void) ; } + +extern struct test *_search(int key); + +#define search(res, key) do { \ + (res) = _search((key)); \ + if (res) \ + __context__(&(res)->lock,1);\ + } 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