1 void _spin_lock(int name);
2 void _spin_unlock(int name);
3 
4 int a, b, c;
5 
func(void)6 int func (void)
7 {
8 	int mylock = 1;
9 	int mylock2 = 1;
10 	int mylock3 = 1;
11 
12 	if (a) {
13 		return;
14 	}
15 
16 	_spin_lock(mylock);
17 	_spin_unlock(mylock);
18 
19 	if (b) {
20 		_spin_unlock(mylock2);
21 		return;
22 	}
23 
24 	if (c)
25 		_spin_lock(mylock3);
26 	return;
27 }
28 /*
29  * check-name: Smatch locking #1
30  * check-command: smatch --project=kernel --spammy sm_locking.c
31  *
32  * check-output-start
33 sm_locking.c:26 func() warn: 'spin_lock:mylock3' is sometimes locked here and sometimes unlocked.
34 sm_locking.c:26 func() warn: inconsistent returns 'spin_lock:mylock2'.
35   Locked on:   line 13
36                line 26
37   Unlocked on: line 21
38  * check-output-end
39  */
40