[cfe-dev] Unused expression and comma operator
Chris Lattner
clattner at apple.com
Thu Nov 15 09:19:11 PST 2007
On Nov 15, 2007, at 3:22 AM, Sanghyeon Seo wrote:
> This issue is similar to that of conditional operator I raised before.
> I concede that "a ? b : c" can be warned as unused expression even if
> b or c have side effects, since computation done by ?: itself is
> unused.
Ok.
> How about "a, b"?
I don't consider "," to be as clear-cut as "?:".
> #define luaZ_initbuffer(L, buff) ((buff)->buffer = NULL, (buff)-
> >buffsize = 0)
> luaZ_initbuffer(L, &p.buff);
>
> Comma operators are often used in preprocessor macro. If "a, b" is
> changed to "a; b", people who use macro as if it is function in codes
> like "if (condition) macro(...)" without braces will get a nasty
> surprise.
>
> I think the standard way to replace "a, b" is "do { a; b; }
> while(0);". But should this warn?
>
> http://c2.com/cgi/wiki?TrivialDoWhileLoop discusses comma operators,
> do while loop, and related tricks in detail.
There are two different ways to handle this. One is to allow the
comma operator. However, if a 'dead' comma is allowed, the checker
should recursively check that no operands are unused expressions. We
should warn on "foo(), 4+5;".
Alternatively, and probably better: just silence the warning if the
operator is a comma that came from a macro expansion. You can check
this by using SourceLocation::isMacroID() on the comma's location.
-Chris
More information about the cfe-dev
mailing list