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.