root/usr/src/tools/smatch/src/validation/sm_locking3.c
int _spin_trylock(int name);
void _spin_lock(int name);
void _spin_unlock(int name);

int func (void)
{
        int mylock = 1;

        if (!({frob(); frob(); _spin_trylock(mylock);})) 
                return;

        frob();
        _spin_unlock(mylock);

        if (((_spin_trylock(mylock)?1:0)?1:0))
                return;
        frob_somemore();
        _spin_unlock(mylock);

        return;
}
/*
 * check-name: Smatch locking #3
 * check-command: smatch --project=kernel sm_locking3.c
 *
 * check-output-start
sm_locking3.c:18 func() error: double unlocked 'mylock' (orig line 15)
sm_locking3.c:20 func() warn: inconsistent returns 'mylock'.
  Locked on  : 16
  Unlocked on: 10,20
 * check-output-end
 */