Behaviour of #pragma in statement context

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm having some difficulty understanding gcc behaviour
on the following example.  It relates to the treatment
of the pragma.

$ cat test22.c
#include <stdio.h>

int x;
void foo (void)
{
  int i, j;
  for (i = 0; i < 10; i++)
#pragma GCC visibility push(default)
    for (j = 0; j < 10; j++)
      x++;
}

int main(void)
{
  foo ();
  printf ("x = %d (should be 100)\n", x);
  return 0;
}


If I compile and run (using gcc 4.3.3, Target: i686-pc-linux-gnu)
I get:
$ gcc -Wall test22.c
$ ./a.out
x = 10 (should be 100)

If I compile it as C++ (same gcc version), I get the behaviour I was expecting:

$ g++ -Wall -xc++ test22.c
$ ./a.out
x = 100 (should be 100)

It seems that the C parser is treating the pragma as a statement
which becomes the entire body of the first for loop, whereas the
C++ parser is not treating the pragma as a statement.

My question is, what should I expect here?

(Disclaimer: I know the example is silly.  In the original code,
the pragma is one we have added locally to control the
degree of loop unrolling in the following loop.  But I wanted to
present here an example which is reproducible using stock gcc.)

Thanks for any insight,
Steve.


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux