A bunch of false positives could be silenced by changing the assign and return hooks to check for unsigned types: static void match_assign(struct expression *expr) { if (expr_unsigned(expr->left)) return; warn_on_positive_error(expr->right); } static void match_return(struct expression *expr) { struct symbol *type; type = cur_func_return_type(); if (type_unsigned(type)) return; warn_on_positive_error(expr); } regards, dan carpenter