root/usr/src/tools/smatch/src/validation/sm_locking7.c
#include "check_debug.h"

unsigned long arch_local_irq_save();
void arch_local_irq_restore(unsigned long flags);
int spin_trylock();
void frob();

void func(int *y)
{
        int lock;
        unsigned long flags;

        if (({
                int __ret;
                flags = arch_local_irq_save();
                __ret = spin_trylock(&lock);
                if (!__ret)
                        arch_local_irq_restore(flags);
                __ret;
            }))
                return;
        frob();
}

/*
 * check-name: smatch locking #7
 * check-command: smatch -p=kernel -I.. sm_locking7.c
 *
 * check-output-start
sm_locking7.c:22 func() warn: inconsistent returns 'flags'.
  Locked on  : 21
  Unlocked on: 22
sm_locking7.c:22 func() warn: inconsistent returns 'lock'.
  Locked on  : 21
  Unlocked on: 22
 * check-output-end
 */