http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49100
--- Comment #1 from Joel Yliluoma <bisqwit at iki dot fi> 2011-05-21 11:31:46 UTC --- It also does not happen with C's nested functions. This for instance compiles and works just fine (to my surprise). #include <stdio.h> int main() { int a; #pragma omp parallel for for(a=0; a<10; ++a) { int c() { return 65; } putchar( c() ); } return 0; } I venture into another bug report here, but I wonder if this is a bug or intentional behavior, that the code below outputs "YYYYYYYYYY", as though the variable "a" within c() is bound to the a from the surrounding context rather than the OpenMP loop's private copy of "a". If the OpenMP loop is removed, it outputs "ABCDEFGHIJ" as expected. #include <stdio.h> int main() { int a = 24; #pragma omp parallel for for(a=0; a<10; ++a) { int c() { return a+65; } putchar( c() ); } return 0; }