1*1f5207b7SJohn Levon void _spin_lock(int name); 2*1f5207b7SJohn Levon void _spin_unlock(int name); 3*1f5207b7SJohn Levon frob(void)4*1f5207b7SJohn Levonvoid frob(void){} 5*1f5207b7SJohn Levon int a; 6*1f5207b7SJohn Levon int b; 7*1f5207b7SJohn Levon int c; func(void)8*1f5207b7SJohn Levonint func (void) 9*1f5207b7SJohn Levon { 10*1f5207b7SJohn Levon int mylock = 1; 11*1f5207b7SJohn Levon int mylock2 = 2; 12*1f5207b7SJohn Levon 13*1f5207b7SJohn Levon if (a == 3) 14*1f5207b7SJohn Levon _spin_lock(mylock); 15*1f5207b7SJohn Levon if (b) 16*1f5207b7SJohn Levon frob(); 17*1f5207b7SJohn Levon if (a == 3) 18*1f5207b7SJohn Levon _spin_unlock(mylock); 19*1f5207b7SJohn Levon if (a) 20*1f5207b7SJohn Levon _spin_lock(mylock); 21*1f5207b7SJohn Levon if (c) 22*1f5207b7SJohn Levon return 0; 23*1f5207b7SJohn Levon if (!!a) 24*1f5207b7SJohn Levon _spin_unlock(mylock); 25*1f5207b7SJohn Levon return 0; 26*1f5207b7SJohn Levon } 27*1f5207b7SJohn Levon 28*1f5207b7SJohn Levon /* 29*1f5207b7SJohn Levon * check-name: Smatch implied #4 30*1f5207b7SJohn Levon * check-command: smatch --project=kernel --spammy sm_implied4.c 31*1f5207b7SJohn Levon * 32*1f5207b7SJohn Levon * check-output-start 33*1f5207b7SJohn Levon sm_implied4.c:22 func() warn: 'spin_lock:mylock' is sometimes locked here and sometimes unlocked. 34*1f5207b7SJohn Levon * check-output-end 35*1f5207b7SJohn Levon */ 36