Re: [PATCH RESEND] sh: sq: Use the bitmap API when applicable
Dan Carpenter <[email protected]>
| Newsgroups | gmane.linux.ports.sh.devel,gmane.linux.kernel,gmane.linux.kernel.janitors |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Apr 18, 2023 at 10:30:01AM +0300, Dan Carpenter wrote: > I have some unpublished Smatch stuff which tries to track "variable x > is in terms of bit units or byte units etc." I will try to make a > static checker rule for this. Attached. It prints a warning like this: drivers/net/ethernet/broadcom/cnic.c:667 cnic_init_id_tbl() warn: allocating units of longs instead of bytes 'test_var' I'll test it out tonight. regards, dan carpenter
check_allocating_longs.c
(text/x-csrc, 1.2 KB)
/*
* Copyright 2023 Linaro Ltd.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
*/
#include "smatch.h"
#include "smatch_slist.h"
static int my_id;
static void match_allocation(struct expression *expr,
const char *name, struct symbol *sym,
struct allocation_info *info)
{
struct smatch_state *units;
char *str;
units = get_units(info->total_size);
if (!units || strcmp(units->name, "longs") != 0)
return;
str = expr_to_str(info->total_size);
sm_warning("allocating units of longs instead of bytes '%s'", str);
free_string(str);
}
void check_allocating_longs(int id)
{
my_id = id;
add_allocation_hook(&match_allocation);
}