On Sat, 3 Sep 2016, Joe Perches wrote:
> There are many nominally incorrect macro definitions > in linux-kernel source where parentheses are not used > for various macros arguments with calculations. > > Does coccinelle or smatch have the ability to detect > potential macro misuse where arguments passed to the > macro are not correctly parenthesized by the macro? > > Something like: > > #define A 1 > #define B 2 > #define shift(val) (val << 1) > > where a use is: > > int c = shift(A | B) > > where the actual result is 5 but the expected result is 6? > > Can either tool suggest changing the macro to > > #define shift(val) ((val) << 1) Coccinelle could do this. It is possible to match macro parameters, and it is possible to match binary operators generically. I can look into it. julia

