[Bug libgomp/64880] New: OpenACC gcc/g++ Discrepancy

tbatgcc at gmail dot com gcc-bugzilla@gcc.gnu.org
Fri Jan 30 18:57:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64880

            Bug ID: 64880
           Summary: OpenACC gcc/g++ Discrepancy
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libgomp
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tbatgcc at gmail dot com
                CC: jakub at gcc dot gnu.org

Using revision 220245.

When trying to compile loop-1.c from trunk/gcc/testsuite/c-c++-common/goacc,
the last two errors generated by combined directives (e.g. #pragma acc parallel
loop, a shorthand for two directives) differ between the C and C++ compiler.

GCC output:
-----------

./gcc -c -fopenacc ../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c: In function
'test1':
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:11:3: error: for
statement expected before 'while'
   while(1)  /* { dg-error "for statement expected" } */
   ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:18:7: error:
expected iteration declaration or initialization before ';' token
   for(;;)  /* { dg-error "expected iteration declaration or initialization" }
*/
       ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:20:18: error: break
statement used with OpenMP for loop
       if (i > 0) break; /* { dg-error "break statement used" } */
                  ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:25:3: error: for
statement expected before 'do'
   do  /* { dg-error "for statement expected" } */
   ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:31:3: error: for
statement expected before 'while'
   while (i < 8)  /* { dg-error "for statement expected" } */
   ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:36:12: error:
invalid type for iteration variable 'd'
   for (d = 1; d < 30; d+= 6)  /* { dg-error "invalid type for iteration
variable" } */
            ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:43:18: error: break
statement used with OpenMP for loop
     if (i == 16) break; /* { dg-error "break statement used" } */
                  ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:58:5: error: for
statement expected before 'a'
     a[1] = 1; /* { dg-error "for statement expected" } */
     ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:62:11: sorry,
unimplemented: directive not yet implemented
   #pragma acc parallel loop
           ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:66:11: sorry,
unimplemented: directive not yet implemented
   #pragma acc kernels loop
           ^



G++ output:
-----------

./g++ -c -fopenacc ../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c: In function 'int
test1()':
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:11:3: error: for
statement expected before 'while'
   while(1)  /* { dg-error "for statement expected" } */
   ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:20:18: error: break
statement used with OpenMP for loop
       if (i > 0) break; /* { dg-error "break statement used" } */
                  ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:18:3: error:
expected iteration declaration or initialization
   for(;;)  /* { dg-error "expected iteration declaration or initialization" }
*/
   ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:25:3: error: for
statement expected before 'do'
   do  /* { dg-error "for statement expected" } */
   ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:31:3: error: for
statement expected before 'while'
   while (i < 8)  /* { dg-error "for statement expected" } */
   ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:36:3: error: invalid
type for iteration variable 'd'
   for (d = 1; d < 30; d+= 6)  /* { dg-error "invalid type for iteration
variable" } */
   ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:43:18: error: break
statement used with OpenMP for loop
     if (i == 16) break; /* { dg-error "break statement used" } */
                  ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:58:5: error: for
statement expected before 'a'
     a[1] = 1; /* { dg-error "for statement expected" } */
     ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:62:24: error:
expected '#pragma acc' clause before 'loop'
   #pragma acc parallel loop
                        ^
../../gcc-master/gcc/testsuite/c-c++-common/goacc/loop-1.c:66:23: error:
expected '#pragma acc' clause before 'loop'
   #pragma acc kernels loop
                       ^


As shown in this example, gcc produces a "sorry, unimplemented" error, whereas
g++ produces another type of error: "expected '#pragma acc' clause before
'loop'". This also happens by modifying the extension of the file to .cpp and
running gcc.



More information about the Gcc-bugs mailing list