On Thu, May 11, 2017 at 10:34:02AM +0530, Pushkar Jambhlekar wrote: > If I remove '!!', sparse flags warning: > > fs/read_write.c:38:29: warning: incorrect type in return expression > (different base types) > fs/read_write.c:38:29: expected bool > fs/read_write.c:38:29: got restricted fmode_t > > It means explicit conversion is needed. FVO"needed" equal to "needed to make sparse STFU"? If anything, that's sparse being wrong - evaluate.c:check_assignment_type() should do if (t == &ctype_bool) { if (is_fouled_type(s)) warning((*rp)->pos, "%s degrades to integer", show_typename(s->ctype.base_type)); goto Cast; } right after } else if (!(sclass & TYPE_RESTRICT)) goto Cast;