aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation/context.c
diff options
Diffstat (limited to 'validation/context.c')
-rw-r--r--validation/context.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/validation/context.c b/validation/context.c
index 165d4f63..c3527dae 100644
--- a/validation/context.c
+++ b/validation/context.c
@@ -1,3 +1,5 @@
+#define __cond_lock(c) ((c) ? ({ __context__(1); 1; }) : 0)
+
void a(void) __attribute__((context(0,1)))
{
__context__(1);
@@ -8,6 +10,9 @@ void r(void) __attribute__((context(1,0)))
__context__(-1);
}
+extern void _ca(int fail);
+#define ca(fail) __cond_lock(_ca(fail))
+
void good_paired1(void)
{
a();
@@ -294,3 +299,18 @@ void warn_goto3(void)
label:
r();
}
+
+void good_cond_lock1(void)
+{
+ if(ca(condition)) {
+ condition2 = 1; /* do stuff */
+ r();
+ }
+}
+
+void warn_cond_lock1(void)
+{
+ if(ca(condition))
+ condition2 = 1; /* do stuff */
+ r();
+}