xref: /illumos-gate/usr/src/tools/smatch/src/validation/sm_locking4.c (revision 1f5207b7604fb44407eb4342aff613f7c4508508)
1*1f5207b7SJohn Levon void _spin_lock(int name);
2*1f5207b7SJohn Levon void _spin_unlock(int name);
3*1f5207b7SJohn Levon 
4*1f5207b7SJohn Levon void frob(void){}
5*1f5207b7SJohn Levon int a;
6*1f5207b7SJohn Levon int b;
7*1f5207b7SJohn Levon void func (void)
8*1f5207b7SJohn Levon {
9*1f5207b7SJohn Levon 	int mylock = 1;
10*1f5207b7SJohn Levon 	int mylock2 = 2;
11*1f5207b7SJohn Levon 
12*1f5207b7SJohn Levon 	if (1)
13*1f5207b7SJohn Levon 	      	_spin_unlock(mylock);
14*1f5207b7SJohn Levon 	frob();
15*1f5207b7SJohn Levon 	if (a)
16*1f5207b7SJohn Levon 		return;
17*1f5207b7SJohn Levon 	if (!0)
18*1f5207b7SJohn Levon 	      	_spin_lock(mylock);
19*1f5207b7SJohn Levon 	if (0)
20*1f5207b7SJohn Levon 	      	_spin_unlock(mylock);
21*1f5207b7SJohn Levon 	if (b)
22*1f5207b7SJohn Levon 		return;
23*1f5207b7SJohn Levon 	if (!1)
24*1f5207b7SJohn Levon 	      	_spin_lock(mylock);
25*1f5207b7SJohn Levon }
26*1f5207b7SJohn Levon /*
27*1f5207b7SJohn Levon  * check-name: Smatch locking #4
28*1f5207b7SJohn Levon  * check-command: smatch --project=kernel sm_locking4.c
29*1f5207b7SJohn Levon  *
30*1f5207b7SJohn Levon  * check-output-start
31*1f5207b7SJohn Levon sm_locking4.c:23 func() warn: inconsistent returns 'spin_lock:mylock'.
32*1f5207b7SJohn Levon   Locked on:   line 22
33*1f5207b7SJohn Levon                line 23
34*1f5207b7SJohn Levon   Unlocked on: line 16
35*1f5207b7SJohn Levon  * check-output-end
36*1f5207b7SJohn Levon  */
37