Bug 49159 - OpenMP compilation errors
Summary: OpenMP compilation errors
Status: RESOLVED INVALID
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.7.0
: P3 major
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-05-25 13:22 UTC by Jose
Modified: 2011-05-26 07:47 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jose 2011-05-25 13:22:34 UTC
I have the following OpenMP Fortran95 test program called test.f90. 

PROGRAM test
USE OMP_LIB, ONLY: OMP_SET_NUM_THREADS
IMPLICIT NONE

  INTEGER, PARAMETER :: numthreds = 4
  INTEGER, PARAMETER :: maxnumber = 12
  INTEGER :: totalsum, add, number

  CALL OMP_SET_NUM_THREADS (numthreads)
  totalsum = 0
  add = 1

  !$OMP PARALLEL DO  &
  !$OMP SCHEDULE(DYNAMIC,1) &
  !$OMP DEFAULT(SHARED)     &
  !$OMP PRIVATE(number1,    &
                number2)    &
  !$OMP REDUCTION(+:totalsum)
  DO nunmber = 1, maxnumber
    totalsum = add + totalsum + number
  END DO
  !$OMP END PARALLEL DO
  WRITE (*,*) totalsum

END PROGRAM test

I try to compile it with the command "gfortran -fopenmp test.f90". The compiler returns with the following error message:

test.f90:16.24:

  !$OMP PRIVATE(number1,  &
                        1 
Error: Syntax error in OpenMP variable list at (1)
test.f90:17.16:

                number2)  &
                1
Error: Unclassifiable statement at (1)
test.f90:18.8:

  !$OMP REDUCTION(+:totalsum)
        1
Error: Unclassifiable OpenMP directive at (1)
test.f90:24.23:

  !$OMP END PARALLEL DO
                       1
Error: Unexpectged !$OMP END PARALLEL DO statement at (1)

It is clear that the erros are caused by the !$OMP PRIVATE line. It seems that a list of variables cannot be broken in two lines. Had I had 
  !$OMP PRIVATE(number1,number2) &
instead of the two lines connected with the & sign, I would have not had any compilation errors. I wanted to try breaking the line, though, because in my codes I have very long lists of private variables. In the previous compiler I used, namely Intel's ifort, I had no issues. Do you have any suggestions when it comes to long lists of private variables? Should I simply have several
 !$OMP PRIVATE ([var1],[var2],...,[varn])
lines each opening and closing the bracket?

Thank you very much
Comment 1 Tobias Burnus 2011-05-25 14:10:06 UTC
(In reply to comment #0)
>   !$OMP PRIVATE(number1,    &
>                 number2)    &

> The compiler returns with the following error message:
>   !$OMP PRIVATE(number1,  &
>                         1 
> Error: Syntax error in OpenMP variable list at (1)

How about adding a  !$OMP  at the beginning of the continuation line? Thus, try:

   !$OMP PRIVATE(number1,    &
   !$OMP         number2)    &
Comment 2 Tobias Burnus 2011-05-25 14:23:53 UTC
I just tested with some other compilers:

ifort accepts the invalid code, PathScale and Open64 show a similar syntax error as gfortran, and PGI has a somewhat more legible error message:

  PGF90-S-0155-Illegal continuation  (test.f90: 17)

For the correct syntax, cf. OpenMP spec at http://openmp.org/wp/openmp-specifications/
Comment 3 Jose 2011-05-25 19:37:08 UTC
>   !$OMP PRIVATE(number1,    &
>   !$OMP         number2)    &

It seems to work this way. thank you very much.
Comment 4 Jakub Jelinek 2011-05-26 07:47:15 UTC
Yeah, see OpenMP 3.0, section 2.1.2 for details how OpenMP Fortran free form directives and their continuations look like.