1int _spin_trylock(int name);
2void _spin_lock(int name);
3void _spin_unlock(int name);
4
5int func (void)
6{
7	int mylock = 1;
8
9	if (!({frob(); frob(); _spin_trylock(mylock);}))
10		return;
11
12	frob();
13	_spin_unlock(mylock);
14
15	if (((_spin_trylock(mylock)?1:0)?1:0))
16		return;
17	frob_somemore();
18	_spin_unlock(mylock);
19
20	return;
21}
22/*
23 * check-name: Smatch locking #3
24 * check-command: smatch --project=kernel sm_locking3.c
25 *
26 * check-output-start
27sm_locking3.c:18 func() error: double unlock 'spin_lock:mylock'
28sm_locking3.c:20 func() warn: inconsistent returns 'spin_lock:mylock'.
29  Locked on:   line 16
30  Unlocked on: line 10
31               line 20
32 * check-output-end
33 */
34