On 7/12/17, Martin Sebor <mse...@gmail.com> wrote: > On 07/11/2017 11:50 PM, sa...@hederstierna.com wrote: >> Hi >> >> Reading about macro pitfalls and eg duplication side-effects >> https://gcc.gnu.org/onlinedocs/cpp/Macro-Pitfalls.html#Macro-Pitfalls >> >> would it be possible to let the preprocessor generate warnings for any of >> these pitfalls? > > The preprocessor has no knowledge of the language rules but it is > possible to detect some of these problems in the parser. In fact, > a checker for one of the CERT problems was added not too long ago: > -Wmulti-statement-macros. I would suggest to open an enhancement > request asking for features you would find particularly valuable. >
I think bug 6906 is related although it's limited to just the specific case of assert(): https://gcc.gnu.org/bugzilla/show_bug.cgi?id=6906 >> >> Maybe all language specific parts are not know at this early preprocessing >> stage, but possibly some info could be stored for use in later pass? >> >> I'm thinking of eg. for "function-like macros" with arguments, checking >> >> -Wmacro-side-effects >> >> * IF function-like macro expands/duplicates an argument more than once >> THEN >> WARN if function() is part as the argument >> WARN if unary ++ or -- is used on variable as part of argument >> WARN if assignment operator = is part of argument >> WARN if volatile variable part as the argument >> >> -Wmacro-operator-precedence >> >> * WARN if macro argument contains an expression with operator(s), an a >> _higher_ precedence operator is used within the macro on this argument, >> without parenthesis around >> >> I'm not sure its even possible at preprocessing stage, but it would be >> nice to have, >> I saw some static code analysis tools like Coverity detects these >> https://www.securecoding.cert.org/confluence/display/c/PRE31-C.+Avoid+side+effects+in+arguments+to+unsafe+macros >> >> Of course it might generate some false-positives so warning might not be >> enabled by default, maybe just -Wall or -Wextra, >> but perhaps it hard to solve, and I'm not sure where and how to implement >> the checking algorithm. > > Those sound like good ideas. Some of them and the challenges > with implementing them were discussed in the context of the > -Wmulti-statement-macros enhancement: > > https://gcc.gnu.org/ml/gcc-patches/2017-06/msg00064.html > > Martin >