On 11/05/2017 03:32 PM, Steve Kargl wrote:
On Sun, Nov 05, 2017 at 11:05:02AM +0100, Tom de Vries wrote:

this patch removes a semicolon after "do {} while (0)" in match macros.

The patch contains this part.

This allows the macros to be used in if-then-elses without curly braces.

The patch does not contain any changes that support this statement.

I'm not listing two changes here, but a change and a consequence.

I'm merely pointing out that this compiles:
...
$ cat do-while-0.c
#define BLA do {} while (0);

void
foo (void)
{
  if (1)
    {
      BLA;
    }
  else
    ;
}
$ gcc do-while-0.c -S
$
...

but this does not:
...
$ cat do-while-0.2.c
#define BLA do {} while (0);

void
foo (void)
{
  if (1)
    BLA;
  else
    ;
}
$ gcc do-while-0.2.c -S
do-while-0.2.c: In function ‘foo’:
do-while-0.2.c:8:3: error: ‘else’ without a previous ‘if’
   else
   ^
$
...

and then again this does:
...
$ cat do-while-0.3.c
#define BLA do {} while (0)

void
foo (void)
{
  if (1)
    BLA;
  else
    ;
}
$ gcc do-while-0.3.c -S
$
...

Thanks,
- Tom

Reply via email to