diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2008-04-11 13:08:32 +0200 |
---|---|---|
committer | Josh Triplett <josh@freedesktop.org> | 2008-04-21 11:10:50 -0700 |
commit | 6663e10782e0bd57c028dd4fb70531bff782e926 (patch) | |
tree | 0ee1dfe6ffc639a086aa2ac574de6db5ab1b4ffe /validation | |
parent | inlined call bugfix & test (diff) | |
download | sparse-6663e10782e0bd57c028dd4fb70531bff782e926.tar.gz sparse-6663e10782e0bd57c028dd4fb70531bff782e926.tar.bz2 sparse-6663e10782e0bd57c028dd4fb70531bff782e926.zip |
improve -Wcontext code and messages
This builds on my previous code improving the code and the messages,
the messages now always tell you the expected and actual context
value. Also add another test since I had mentioned that case.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Diffstat (limited to 'validation')
-rw-r--r-- | validation/context-dynamic.c | 14 | ||||
-rw-r--r-- | validation/context-named.c | 72 | ||||
-rw-r--r-- | validation/context-statement.c | 17 | ||||
-rw-r--r-- | validation/context.c | 90 |
4 files changed, 149 insertions, 44 deletions
diff --git a/validation/context-dynamic.c b/validation/context-dynamic.c index e3bbb98..5e172f0 100644 --- a/validation/context-dynamic.c +++ b/validation/context-dynamic.c @@ -151,11 +151,21 @@ static int good_switch(void) r(); } +static void bad_lock1(void) +{ + r(); + a(); +} + /* * check-name: Check -Wcontext with lock trylocks * * check-error-start -context-dynamic.c:83:6: warning: context problem in 'bad_trylock1' - function 'r' expected different context -context-dynamic.c:133:6: warning: context problem in 'bad_trylock2' - function 'r' expected different context +context-dynamic.c:83:6: warning: context problem in 'bad_trylock1': 'r' expected different context +context-dynamic.c:83:6: context 'A': wanted >= 1, got 0 +context-dynamic.c:133:6: warning: context problem in 'bad_trylock2': 'r' expected different context +context-dynamic.c:133:6: context 'A': wanted >= 1, got 0 +context-dynamic.c:156:6: warning: context problem in 'bad_lock1': 'r' expected different context +context-dynamic.c:156:6: context 'A': wanted >= 1, got 0 * check-error-end */ diff --git a/validation/context-named.c b/validation/context-named.c index 806d736..58310e9 100644 --- a/validation/context-named.c +++ b/validation/context-named.c @@ -501,29 +501,53 @@ static void good_mixed_with_if(void) * check-name: Check -Wcontext with lock names * * check-error-start -context-named.c:86:3: warning: context imbalance in 'warn_lock1' - wrong count at exit (TEST) -context-named.c:93:3: warning: context imbalance in 'warn_lock2' - wrong count at exit (TEST) -context-named.c:100:3: warning: context imbalance in 'warn_lock3' - wrong count at exit (TEST) -context-named.c:105:3: warning: context problem in 'warn_unlock1' - function 'r' expected different context -context-named.c:112:3: warning: context problem in 'warn_unlock2' - function 'r' expected different context -context-named.c:152:9: warning: context imbalance in 'warn_if1' - wrong count at exit (TEST) -context-named.c:162:9: warning: context imbalance in 'warn_if2' - wrong count at exit (TEST) -context-named.c:218:4: warning: context imbalance in 'warn_while1' - wrong count at exit (TEST) -context-named.c:225:4: warning: context problem in 'warn_while2' - function 'r' expected different context -context-named.c:235:4: warning: context imbalance in 'warn_while3' - wrong count at exit (TEST) -context-named.c:295:5: warning: context imbalance in 'warn_goto1' - wrong count at exit (TEST) -context-named.c:305:6: warning: context imbalance in 'warn_goto2' - wrong count at exit (TEST) -context-named.c:315:6: warning: context problem in 'warn_goto3' - function 'r' expected different context -context-named.c:321:7: warning: context imbalance in 'warn_multiple1' - wrong count at exit (TEST) -context-named.c:327:6: warning: context imbalance in 'warn_multiple2' - wrong count at exit (TEST2) -context-named.c:333:6: warning: context problem in 'warn_mixed1' - function 'r' expected different context -context-named.c:343:6: warning: context problem in 'warn_mixed2' - function 'r' expected different context -context-named.c:353:6: warning: context problem in 'warn_mixed3' - function 'r' expected different context -context-named.c:364:6: warning: context imbalance in 'warn_mixed4' - wrong count at exit (TEST2) -context-named.c:434:14: warning: context problem in 'warn_fn' - function 'need_lock' expected different context -context-named.c:441:15: warning: context problem in 'warn_fn2' - function 'need_lock2' expected different context -context-named.c:456:20: warning: context problem in 'warn_exact_fn1' - function 'need_lock_exact' expected different context -context-named.c:464:20: warning: context problem in 'warn_exact_fn2' - function 'need_lock_exact' expected different context -context-named.c:475:15: warning: context problem in 'warn_fn3' - function 'need_lock3' expected different context +context-named.c:86:3: warning: context imbalance in 'warn_lock1': wrong count at exit +context-named.c:86:3: context 'TEST': wanted 0, got 1 +context-named.c:93:3: warning: context imbalance in 'warn_lock2': wrong count at exit +context-named.c:93:3: context 'TEST': wanted 0, got 1 +context-named.c:100:3: warning: context imbalance in 'warn_lock3': wrong count at exit +context-named.c:100:3: context 'TEST': wanted 0, got 1 +context-named.c:105:3: warning: context problem in 'warn_unlock1': 'r' expected different context +context-named.c:105:3: context 'TEST': wanted >= 1, got 0 +context-named.c:112:3: warning: context problem in 'warn_unlock2': 'r' expected different context +context-named.c:112:3: context 'TEST': wanted >= 1, got 0 +context-named.c:152:9: warning: context imbalance in 'warn_if1': wrong count at exit +context-named.c:152:9: context 'TEST': wanted 0, got 1 +context-named.c:162:9: warning: context imbalance in 'warn_if2': wrong count at exit +context-named.c:162:9: context 'TEST': wanted 0, got 1 +context-named.c:218:4: warning: context imbalance in 'warn_while1': wrong count at exit +context-named.c:218:4: context 'TEST': wanted 0, got 1 +context-named.c:225:4: warning: context problem in 'warn_while2': 'r' expected different context +context-named.c:225:4: context 'TEST': wanted >= 1, got 0 +context-named.c:235:4: warning: context imbalance in 'warn_while3': wrong count at exit +context-named.c:235:4: context 'TEST': wanted 0, got 1 +context-named.c:295:5: warning: context imbalance in 'warn_goto1': wrong count at exit +context-named.c:295:5: context 'TEST': wanted 0, got 1 +context-named.c:305:6: warning: context imbalance in 'warn_goto2': wrong count at exit +context-named.c:305:6: context 'TEST': wanted 0, got 1 +context-named.c:315:6: warning: context problem in 'warn_goto3': 'r' expected different context +context-named.c:315:6: context 'TEST': wanted >= 1, got 0 +context-named.c:321:7: warning: context imbalance in 'warn_multiple1': wrong count at exit +context-named.c:321:7: context 'TEST': wanted 0, got 1 +context-named.c:327:6: warning: context imbalance in 'warn_multiple2': wrong count at exit +context-named.c:327:6: context 'TEST2': wanted 0, got 1 +context-named.c:333:6: warning: context problem in 'warn_mixed1': 'r' expected different context +context-named.c:333:6: context 'TEST': wanted >= 1, got 0 +context-named.c:343:6: warning: context problem in 'warn_mixed2': 'r' expected different context +context-named.c:343:6: context 'TEST': wanted >= 1, got 0 +context-named.c:353:6: warning: context problem in 'warn_mixed3': 'r' expected different context +context-named.c:353:6: context 'TEST': wanted >= 1, got 0 +context-named.c:364:6: warning: context imbalance in 'warn_mixed4': wrong count at exit +context-named.c:364:6: context 'TEST2': wanted 0, got 1 +context-named.c:434:14: warning: context problem in 'warn_fn': 'need_lock' expected different context +context-named.c:434:14: context 'TEST': wanted >= 1, got 0 +context-named.c:441:15: warning: context problem in 'warn_fn2': 'need_lock2' expected different context +context-named.c:441:15: context 'TEST': wanted >= 1, got 0 +context-named.c:456:20: warning: context problem in 'warn_exact_fn1': 'need_lock_exact' expected different context +context-named.c:456:20: context 'TEST': wanted 1, got 2 +context-named.c:464:20: warning: context problem in 'warn_exact_fn2': 'need_lock_exact' expected different context +context-named.c:464:20: context 'TEST': wanted 1, got 0 +context-named.c:475:15: warning: context problem in 'warn_fn3': 'need_lock3' expected different context +context-named.c:475:15: context 'TEST': wanted >= 1, got 0 * check-error-end */ diff --git a/validation/context-statement.c b/validation/context-statement.c index ec26fef..fd79a6a 100644 --- a/validation/context-statement.c +++ b/validation/context-statement.c @@ -47,12 +47,23 @@ static void bad_macro2(void) m(); } +static void bad_macro3(void) +{ + r(); + a(); +} + /* * check-name: Check __context__ statement with required context * * check-error-start -context-statement.c:16:8: warning: context imbalance in 'bad_arr' - unexpected unlock (LOCK) -context-statement.c:38:5: warning: context imbalance in 'bad_macro1' - __context__ statement expected different lock context (LOCK) -context-statement.c:47:5: warning: context imbalance in 'bad_macro2' - __context__ statement expected different lock context (LOCK) +context-statement.c:16:8: warning: context imbalance in 'bad_arr': unexpected unlock +context-statement.c:16:8: context 'LOCK': wanted 0, got -1 +context-statement.c:38:5: warning: context imbalance in 'bad_macro1': __context__ statement expected different context +context-statement.c:38:5: context 'LOCK': wanted >= 1, got 0 +context-statement.c:47:5: warning: context imbalance in 'bad_macro2': __context__ statement expected different context +context-statement.c:47:5: context 'LOCK': wanted >= 1, got 0 +context-statement.c:53:5: warning: context imbalance in 'bad_macro3': __context__ statement expected different context +context-statement.c:53:5: context 'LOCK': wanted >= 0, got -1 * check-error-end */ diff --git a/validation/context.c b/validation/context.c index df337e5..4250e95 100644 --- a/validation/context.c +++ b/validation/context.c @@ -325,24 +325,84 @@ static void warn_odd_looping(void) r(); } +static void warn_huge_switch(void) +{ + a(); + + switch(condition) { + case 1: + r(); + break; + case 2: + r(); + break; + case 3: + r(); + break; + case 4: + r(); + break; + case 5: + r(); + break; + case 11: + r(); + break; + case 12: + r(); + break; + case 13: + r(); + break; + case 14: + r(); + case 15: + r(); + break; + case 16: + r(); + break; + case 17: + r(); + break; + } +} + /* * check-name: Check -Wcontext * * check-error-start -context.c:71:3: warning: context imbalance in 'warn_lock1' - wrong count at exit -context.c:78:3: warning: context imbalance in 'warn_lock2' - wrong count at exit -context.c:85:3: warning: context imbalance in 'warn_lock3' - wrong count at exit -context.c:90:3: warning: context problem in 'warn_unlock1' - function 'r' expected different context -context.c:97:3: warning: context problem in 'warn_unlock2' - function 'r' expected different context -context.c:137:9: warning: context imbalance in 'warn_if1' - wrong count at exit -context.c:147:9: warning: context imbalance in 'warn_if2' - wrong count at exit -context.c:203:4: warning: context imbalance in 'warn_while1' - wrong count at exit -context.c:210:4: warning: context problem in 'warn_while2' - function 'r' expected different context -context.c:220:4: warning: context imbalance in 'warn_while3' - wrong count at exit -context.c:280:5: warning: context imbalance in 'warn_goto1' - wrong count at exit -context.c:290:6: warning: context imbalance in 'warn_goto2' - wrong count at exit -context.c:300:6: warning: context problem in 'warn_goto3' - function 'r' expected different context -context.c:315:6: warning: context problem in 'warn_cond_lock1' - function 'r' expected different context -context.c:325:10: warning: context problem in 'warn_odd_looping' - function 'r' expected different context +context.c:71:3: warning: context imbalance in 'warn_lock1': wrong count at exit +context.c:71:3: default context: wanted 0, got 1 +context.c:78:3: warning: context imbalance in 'warn_lock2': wrong count at exit +context.c:78:3: default context: wanted 0, got 1 +context.c:85:3: warning: context imbalance in 'warn_lock3': wrong count at exit +context.c:85:3: default context: wanted 0, got 1 +context.c:90:3: warning: context problem in 'warn_unlock1': 'r' expected different context +context.c:90:3: default context: wanted >= 1, got 0 +context.c:97:3: warning: context problem in 'warn_unlock2': 'r' expected different context +context.c:97:3: default context: wanted >= 1, got 0 +context.c:137:9: warning: context imbalance in 'warn_if1': wrong count at exit +context.c:137:9: default context: wanted 0, got 1 +context.c:147:9: warning: context imbalance in 'warn_if2': wrong count at exit +context.c:147:9: default context: wanted 0, got 1 +context.c:203:4: warning: context imbalance in 'warn_while1': wrong count at exit +context.c:203:4: default context: wanted 0, got 1 +context.c:210:4: warning: context problem in 'warn_while2': 'r' expected different context +context.c:210:4: default context: wanted >= 1, got 0 +context.c:220:4: warning: context imbalance in 'warn_while3': wrong count at exit +context.c:220:4: default context: wanted 0, got 1 +context.c:280:5: warning: context imbalance in 'warn_goto1': wrong count at exit +context.c:280:5: default context: wanted 0, got 1 +context.c:290:6: warning: context imbalance in 'warn_goto2': wrong count at exit +context.c:290:6: default context: wanted 0, got 1 +context.c:300:6: warning: context problem in 'warn_goto3': 'r' expected different context +context.c:300:6: default context: wanted >= 1, got 0 +context.c:315:6: warning: context problem in 'warn_cond_lock1': 'r' expected different context +context.c:315:6: default context: wanted >= 1, got 0 +context.c:325:10: warning: context problem in 'warn_odd_looping': 'r' expected different context +context.c:325:10: default context: wanted >= 1, got 0 +context.c:360:10: warning: context problem in 'warn_huge_switch': 'r' expected different context +context.c:360:10: default context: wanted >= 1, got 0 * check-error-end */ |