https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109767
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Ah, ok, I see what do you mean. The thing is that the implementation of loop bind(teams) as distribute parallel do simd is effectively just an implementation detail, and per the spec j is not private in the loop construct, but private on teams. I think we need to discuss this in lang committee then (what behavior is for int i, j; #pragma omp teams private (j) { #pragma omp loop bind(teams) for (i = 0; i < 16; ++i) for (j = 0; j < 16; ++j) ; } ). Obviously, if private (j) is on omp loop rather than omp teams, it has to work as expected.