diff options
| author | Josh Triplett <josht@vnet.ibm.com> | 2006-06-29 15:31:04 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-07-05 15:36:31 -0700 |
| commit | 8731bb7b2e6229a4fe2234796d0371d01cc22835 (patch) | |
| tree | c3a98c81fa0af0ef2bfea015dd928f90ef680284 /validation | |
| parent | 796a98361abd47d6bf1f2a3868acccc6e0b5ad0f (diff) | |
| download | sparse-dev-8731bb7b2e6229a4fe2234796d0371d01cc22835.tar.gz | |
[PATCH] Add test cases for __context__ statement and context attribute
Add validation/context.c, which includes various test cases for
__context__(...) and __attribute__((context(...))). These test cases include
both correct usage, in the functions named good_*, and incorrect usage, in the
functions named warn_*.
Signed-off-by: Josh Triplett <josh@freedesktop.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'validation')
| -rw-r--r-- | validation/context.c | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/validation/context.c b/validation/context.c new file mode 100644 index 00000000..165d4f63 --- /dev/null +++ b/validation/context.c @@ -0,0 +1,296 @@ +void a(void) __attribute__((context(0,1))) +{ + __context__(1); +} + +void r(void) __attribute__((context(1,0))) +{ + __context__(-1); +} + +void good_paired1(void) +{ + a(); + r(); +} + +void good_paired2(void) +{ + a(); + r(); + a(); + r(); +} + +void good_paired3(void) +{ + a(); + a(); + r(); + r(); +} + +void good_lock1(void) __attribute__((context(0,1))) +{ + a(); +} + +void good_lock2(void) __attribute__((context(0,1))) +{ + a(); + r(); + a(); +} + +void good_lock3(void) __attribute__((context(0,1))) +{ + a(); + a(); + r(); +} + +void good_unlock1(void) __attribute__((context(1,0))) +{ + r(); +} + +void good_unlock2(void) __attribute__((context(1,0))) +{ + a(); + r(); + r(); +} + +void warn_lock1(void) +{ + a(); +} + +void warn_lock2(void) +{ + a(); + r(); + a(); +} + +void warn_lock3(void) +{ + a(); + a(); + r(); +} + +void warn_unlock1(void) +{ + r(); +} + +void warn_unlock2(void) +{ + a(); + r(); + r(); +} + +extern int condition, condition2; + +int good_if1(void) +{ + a(); + if(condition) { + r(); + return -1; + } + r(); + return 0; +} + +void good_if2(void) +{ + if(condition) { + a(); + r(); + } +} + +void good_if3(void) +{ + a(); + if(condition) { + a(); + r(); + } + r(); +} + +int warn_if1(void) +{ + a(); + if(condition) + return -1; + r(); + return 0; +} + +int warn_if2(void) +{ + a(); + if(condition) { + r(); + return -1; + } + return 0; +} + +void good_while1(void) +{ + a(); + while(condition) + ; + r(); +} + +void good_while2(void) +{ + while(condition) { + a(); + r(); + } +} + +void good_while3(void) +{ + while(condition) { + a(); + r(); + if(condition2) + break; + a(); + r(); + } +} + +void good_while4(void) +{ + a(); + while(1) { + if(condition2) { + r(); + break; + } + } +} + +void good_while5(void) +{ + a(); + while(1) { + r(); + if(condition2) + break; + a(); + } +} + +void warn_while1(void) +{ + while(condition) { + a(); + } +} + +void warn_while2(void) +{ + while(condition) { + r(); + } +} + +void warn_while3(void) +{ + while(condition) { + a(); + if(condition2) + break; + r(); + } +} + +void good_goto1(void) +{ + a(); + goto label; +label: + r(); +} + +void good_goto2(void) +{ + a(); + goto label; + a(); + r(); +label: + r(); +} + +void good_goto3(void) +{ + a(); + if(condition) + goto label; + a(); + r(); +label: + r(); +} + +void good_goto4(void) +{ + if(condition) + goto label; + a(); + r(); +label: + ; +} + +void good_goto5(void) +{ + a(); + if(condition) + goto label; + r(); + return; +label: + r(); +} + +void warn_goto1(void) +{ + a(); + goto label; + r(); +label: + ; +} + +void warn_goto2(void) +{ + a(); + goto label; + r(); +label: + a(); + r(); +} + +void warn_goto3(void) +{ + a(); + if(condition) + goto label; + r(); +label: + r(); +} |
