Yeah. The re-work to scoped_guard() has landed in linux next. It does something like: for (struct lock __cleanup(destroy) = constructor; is_not_optional || took_lock(); goto done_label) if (0) { done_label: break; } else Smatch has always ignored if (0) statements because it never occured to me that there would be a label statement in there. But also because of the way that Smatch handles loops, this was always going to need to be handled specially. I'll try push something today. regards, dan carpenter