Description: This test case exhibits the problem that the presence of a SECTIONS directive with only one SECTION inside of a PARALLEL region causes only one thread to be created when omp_set_num_threads was previously called with 4 threads. If the directives internal to this PARALLEL region are commented out, 4 threads are created and the program produces expected output. The compiler used was GNU gfortran. The test case works as expected when compiled with PGI.
> gfortran -v Using built-in specs. Target: x86_64-suse-linux Configured with: ../xt-gcc-4.2.0/configure --prefix=/opt/gcc/4.2.0/snos --disable-nls --libdir=/opt/gcc/4.2.0/snos/lib --enable-languages=c,c++,fortran --with-gxx-include-dir=/opt/gcc/4.2.0/snos/include/g++ --with-slibdir=/opt/gcc/4.2.0/snos/lib --with-system-zlib --enable-shared --enable-__cxa_atexit x86_64-suse-linux Thread model: posix gcc version 4.2.0 20070514 (rpm:4) > cat bug2831.f90 ! Derived from OpenMP test omp1/F2_1_1_2_1c.f90 use omp_lib implicit none integer, parameter :: NT = 4 integer :: nth !$ call omp_set_dynamic(.false.) !$ call omp_set_num_threads(NT) !$omp parallel default(none) shared(nth) print *, omp_get_thread_num(), omp_get_num_threads() !$omp sections !$omp section nth=omp_get_num_threads() !$omp endsections !$omp endparallel print *, 'nth=',nth,' NT=',NT END > diff bug2831.f90 bug2831a.f90 11,12d10 < !$omp sections < !$omp section 14d11 < !$omp endsections Incorrect output is produced: > ftn -O0 -fopenmp -o x bug2831.f90 /opt/xt-pe/2.1/bin/snos64/ftn: INFO: linux target is being used > aprun -n 1 ./x 0 1 nth= 1 NT= 4 Application 217361 resources: utime 0, stime 0 Correct output from program with sections/section directives removed: > ftn -O0 -fopenmp -o xa bug2831a.f90 /opt/xt-pe/2.1/bin/snos64/ftn: INFO: linux target is being used > aprun -n 1 ./xa 0 4 1 4 3 4 2 4 nth= 4 NT= 4 Application 217362 resources: utime 0, stime 0 ------ Note: ftn is an alias for: /opt/gcc/4.2.0/bin/../snos/bin/gfortran -static -v -I/opt/xt-mpt/2.1/mpich2-64/GP/include -I/opt/xt-mpt/2.1/mpich2-64/GP/include -L/opt/xt-mpt/2.1/mpich2-64/GP/lib -I/opt/acml/3.6.1/gnu64/include -I/opt/xt-libsci/10.1.0/gnu/snos64/include -I/opt/xt-libsci/10.1.0/gnu/snos64/include/superlu -I/opt/xt-mpt/2.1/sma/P/include -L/opt/acml/3.6.1/gnu64/lib -L/opt/xt-libsci/10.1.0/gnu/snos64/lib -L/opt/xt-mpt/2.1/sma/P/lib -lmpichf90 -lsci -lacml -lsma -lmpichf90 -lmpich -lrt -D__CRAYXT_COMPUTE_LINUX_TARGET -D__TARGET_LINUX__ -fno-second-underscore -I/notbackedup/users/rsrel/rs64.DEV.070604.Mon/install/include -I/opt/xt-catamount/2.1/catamount/linux/include -I/opt/xt-service/2.1/include -L/notbackedup/users/rsrel/rs64.DEV.070604.Mon/install/lib/snos64 -L/opt/xt-pe/2.1/cnos/linux/64/lib -L/opt/xt-mpt/2.1/lib/snos64 -L/opt/xt-service/2.1/lib/snos64 -Wl,--start -lpct -lalpslli -lalpsutil -lportals -lpthread -Wl,--end -lgfortranbegin -lgfortran -lm -- Summary: PRESENCE OF SECTIONS W/ 1 SECTION CAUSES PARALLEL REGION TO HAVE 1 THREAD, NOT 4 Product: gcc Version: 4.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: longb at cray dot com GCC build triplet: x86_64-suse-linux GCC host triplet: x86_64-suse-linux GCC target triplet: x86_64-suse-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32468