------- Comment #4 from burnus at gcc dot gnu dot org 2007-06-22 21:06 ------- Thanks for the report.
(By the way, ifort does accept the program and gives the right result whereas sunf95 has the same problem as gfortran.) There are actually two problems: a) "Allocatable arrays may not appear in a copyin clause." This is violated for copyin(struc1) One should at least print a warning with -Wall, but I'm not sure whether one need to reject it as GCC seems to do the right thing (cf. (b)) b) If one replaces the "allocatable :: a(:)" by "a(2)" this constrain is met, but the number of threads is still (one thread per CPU core online) instead of being omp_set_num_threads(4). Reading and re-reading 2.4.1 I fail to find the place which says that with omp_set_dynamic(.true.) omp_set_num_threads(4) the number of threads is guaranteed to be 4. Using omp_set_dynamic(.false.) the situation is clear and gfortran (and sunf95) produce the same result. I have the feeling that the result of gfortran is perfectly valid. ifort seems to default for dyn-var = true to the specified number number of processors whereas sunf95 and gfortran seem to use min(CPU cores online, specified num_threads). -- burnus at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu dot org URL| |http://www.openmp.org/drupal | |/mp-documents/spec25.pdf Keywords|accepts-invalid |wrong-code http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32467