Hello all,
I am working on a cocci script to remove unneeded code and I have
hopefully a simple question. My script attempts to remove a macro's use,
but only when a relevant struct definition is *not* blocked off by #if
and/or #ifdef CONFIG_OF. I think I would just like to have cocci ignore
all code in-between any blocks but I cannot seem to get it to work. I
have tried --no-includes and --undefined CONFIG_OF, but it still removes
the target macro, even when the struct is in an ifdef block. Example:
static const struct of_device_id gpio_ids[];
static int somefunction()
{
const struct of_device_id *match;
match = of_match_device(of_match_ptr(davinci_gpio_ids));
}
#if IS_ENABLED(CONFIG_OF)
static const struct of_device_id gpio_ids[] = {
{ .compatible = "gpio", },
{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, gpio_ids);
#endif
static struct platform_driver gpio_driver = {
.probe = gpio_probe,
.driver = {
.name = "gpio",
.of_match_table = of_match_ptr(gpio_ids),
},
};
None of the of_match_ptr should be removed in the above file, but if the
#if/endif were remove all should be removed, but I'm not sure how to
match for the ifdef?
Here is my script so far:
@s@
identifier arr;
@@
(
struct of_device_id arr[] = {
...
};
)
@depends on s@
identifier s.arr;
@@
(
- of_match_ptr(arr)
+ arr
)
Thanks,
Andrew
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci