On 06/08/2017 11:29 AM, Marek Polacek wrote:
> On Wed, Jun 07, 2017 at 08:02:42PM +0100, Pedro Alves wrote:
>> Hi Marek,
>>
>> Nice warning!  Just to confirm, would the patch warn with code like:
>  
> Thanks.  BTW, if you (or anyone) could come up with a better name,
> I'm all ears.

AFAICS, the warning's intent is catching the case of a
a macro expanding to multiple (top level) statements, not lines.
Both the comments in the code and the description of the
warning talk in those terms:

 +/* (....) This warning warns about
 +   cases when a macro expands to multiple statements not wrapped in
 +   do {} while (0) or ({ }) and is used as a body of if/else/for/while
 +   conditionals.  For example,

 +Wmultiline-expansion
 +C ObjC C++ ObjC++ Var(warn_multiline_expansion) Warning LangEnabledBy(C ObjC 
C++ ObjC++,Wall)
 +Warn about macros expanding to multiple statements in a body of a conditional 
such as if, else, while, or for.

So it'd seem clearer to me if the warning was named around
"-Wmulti-statement-something" instead of "-Wmultiline-something"?

  -Wmulti-statement-expansion
  -Wmulti-statement-macros     
  -Wmulti-statement-macro     
  -Wmulti-statement-macro-expansion

Particularly when one could argue that "multiline expansion" in
context of macros doesn't make any sense, given macros always
expand to a single line:

 #define SAME_LINE                              \
        (__LINE__                               \
         == __LINE__)

 static_assert (SAME_LINE, "");


> Nope, it doesn't warn (neither C nor C++).  I should probably add this test.

Thanks for confirming.  A test would be nice, to make sure we 
don't regress.

Thanks,
Pedro Alves

Reply via email to