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.